Gila Sunset

Gila Sunset


ABSTRACT

Animal movements are often defined using the home range concept. Consequently, home ranges are determined by temporal, spatial, and individual-level processes. Within the environment, one of the key factors influencing an animal’s range and how it uses the environment is that of resources. Alterations to the environment that affect resource distribution and availability can have profound consequences on an animal’s spatial patterns. One of the best examples of this is that of golf courses. Certain environmental modifications exhibited by some human altered environments can have positive effects on certain wildlife species by altering their movement patterns and foraging efforts. We analyzed data collected from 22 Gila Monsters Heloderma suspectum at a subsidized environment in Arizona from 2007 to 2013 and 15 Gila Monsters from a non-subsidized environment from 2000 to 2002. We performed both kernel density estimation and minimum convex polygons for comparability purposes. After adjusting area estimates for sex, number of fixes, and year, males in the subsidized environment had an average overall area of 13.6 ha while the females had an area of 8.3 ha. In the unsubsidized environment, males had an average overall area of 43.2 ha while females had an area of 23.6 ha. Gila Monsters between the two environments also exhibited seasonal differences, primarily in the dry and monsoon seasons. There were also differences in home range overlap within and between sexes. In the subsidized population, there was very little male-male overlap with only two occurances, more female-female overlap and male-female overlap was increased. Male home ranges often overlapped several female home ranges. This suggests that Gila monster home ranges may be smaller in subsidized resource environments than those of un-subsidized environments due to increases in available resources.


Gila Monsters (Heloderma suspectum) and Human Altered Environments

Animal movements are often defined using the home range concept. Formally defined by William Burk in 1943 as, “that area traversed by the individual in its normal activities of foraging, mating, and caring for young. Occasional sallies outside the area, perhaps exploratory in nature, should not be considered part of the home range”. Consequently, home ranges are determined by temporal, spatial, and individual-level processes. Studying animal HR’s has been of special interest to a wide variety of researchers, including those studying relationships between behavior, age, sex, and spacing patterns, resource distribution as it affects space use, the relationship between metabolic requirements and home range size, and space requirements for purposes of controlling problematic species, conservation, and wildlife management.

Within an animals environment, one of the key factors influencing an animals range and how it uses the environment is that of resources. Alterations to the environment that affect resource distribution and availability can have profound consequences on an animals spatial patterns. Some of the best examples of this are alterations caused by human activities. Historically, human alterations to environments have been percieved as having negative consequences on local wildlife populations. However, certain environmental modifications can have positive effects on various wildlife species. This is seen in the implementation of certain golf courses, and green areas. One of the key consequences of golf courses, especially those placed in desert environments is the water irrigation supplementation and horticulture that comes with them. As a result, this enhances primary productivity which increases the presence of vertebrate animals that take advantage of that increase in productivity. In reptiles, faster growth is often correlated with increases in precipitation and available resources. A Recent study has shown that Gila Monsters Heloderma suspectum inhabiting a golf course in the upland Sonoran of Arizona grew larger and faster than unsubsidized populations.

Gila Monsters occupy the hot desert regions of the Mohave Desert in the extreme southeastern Nevada, south through the Sonoran Desert of Arizona into Sonora and northern Sinaloa, Mexico. Gilas are known to be “widely foraging” animals due to their specialization in feeding on the young and eggs of small vertebrate nests. These characteristics and findings make this species a good candidate for studying the potential alterations to animal home ranges that nutrient subsidized areas such as golf courses may have on animal populations.

[1] 2460817


Study Site

For the subsidized resource population occupying a human altered environment, spatial data was collected on 22 Gila Monsters, 13 females and 9 males at Stone Canyon Golf Club, located in Pima County, Arizona at the base of the Tortolita Mountains. Stone Canyon is a golf club with an area of approximately 345 hectares, consisting of vegetation that is typical of Sonoran desertscrub habitat of the Arizona uplands. Elevation ranges from 900m-1000m, with the landscape consisting of granite outcrop hills with large boulders throughout, interrupted by watered fairways, ponds and paved cart paths. This golf course possesses a partially urbanized housing development with properties encompassing the perimeter of the course.


Figure 1 | Stone Canyon Golf Club, located in Oro Valley, Arizona on the northern edge of Tucson, Arizona.


StoneCanyon

StoneCanyon


For the comparison site, the unsubsidized natural population was represented using spatial data that was collected on 15 Gila Monsters, 6 males, 6 females and 3 sub-adults from 2000-2002 using radio-telemetry at Owl Head Buttes, Arizona. Located in Arizona upland Sonoran Desert approximately 19 km north northeast of Stone Canyon, the Owl Head Buttes study site was an area of approximately 200 hectares, with an elevation range of 800m-900m, and discontinuous southern buttes of rocky outcrops. Owl Head harbors no urbanized development or other human altered environments aside from highly spaced unpaved dirt access roads throughout the surrounding area.


OwlHead

OwlHead


Overall Yearly Home Ranges (MCP)

Summary of home range size.

95% and 100% MCP estimates were used to assess overall and seasonal variation for comparisons between Owl Head and Stone Canyon. To explore potential infrequent exploratory movements as described by Burt’s (1943) definition of home range, such as mate searching by males, we used 95% MCPs. This can give an indication to the extent of a Gila Monsters home range that is potentially related to exploratory movements. Due the nature of our dataset we used Repeated Measures Analysis of Variance (RMANOVA) due to its reduced sensitivity to missing data and an unbalanced design. This method was performed for both 100% and 95% MCPs. For yearly home ranges, Mixed Effects RMANOVAs were performed to examine the effects of year, sex, and sample size. Post-Hoc pairwise comparisons were performed to assess where significant differences occurred.


Figure 2 | Total relocations of 22 Gila Monsters throughout Stone Canyon for the entire study period.


Overall Home Range Comparisons MCP.


At Stone Canyon, home ranges appeared relatively stable, with no major shifts in areas of use (Fig. 4). Male yearly home ranges ranged from 1.91 - 25.1 ha, with a mean of 11.7 ± 1.7 S.E. ha (100% MCP), 9.1 ± 1.3 S.E. Ha (95% MCP). Female home ranges ranged from 2.1 – 38.8 ha and a mean of 9.8 ± 1.1 S.E. ha (100% MCP), 7.1 ± 0.7 S.E. ha (95% MCP). Male Gila Monsters at Owl head Buttes had home ranges that ranged from 10.6 – 82.7 ha with a mean of 43.2 ± 5.7 S.E. ha (100% MCP), 41.9 ± 4.9 S.E. ha (95% MCP). Female home ranges ranged from 7.1 – 47.6 with a mean of 22.0 ± 3.7 S.E. ha (100% MCP), 20.6 ± 2.5 S.E. ha (95% MCP).

Overall combined 100% MCP means averaged across sex
Environment N Home_Range_100mcp sd se ci
nonsubsidized 25 33.92000 20.793689 4.1587378 8.583213
subsidized 53 10.40151 6.948743 0.9544832 1.915311



Table 1 | Raw group 100% MCP home range means of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
Environment Sex N Home_Range_100mcp sd se ci
nonsubsidized female 11 22.063636 12.287414 3.704795 8.254797
nonsubsidized male 14 43.235714 21.672372 5.792185 12.513255
subsidized female 38 9.839474 6.889003 1.117544 2.264359
subsidized male 15 11.825333 7.133668 1.841905 3.950494
Table 2 | Raw group 95% MCP home range means of raw data of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
Environment Sex N Home_Range_95mcp sd se ci
nonsubsidized female 6 20.600000 6.286493 2.566450 6.597270
nonsubsidized male 8 41.950000 13.987954 4.945489 11.694222
subsidized female 38 7.132895 4.280606 0.694406 1.407000
subsidized male 15 9.195333 5.246499 1.354640 2.905415


In the analyses of both populations, year had no effect on 100% MCP home range sizes (F = 0.41, P = 0.52), while there was a detected significant difference in home ranges between the two populations (F = 8.69, P = 0.004), as well as sex (F = 16.33, P = 0.0004).


Repeated measures ANOVA for Yearly Home Ranges.

ANOVA Table: 100% MCP

Type III Analysis of Variance Table with Satterthwaite's method
                 Sum Sq Mean Sq NumDF  DenDF F value    Pr(>F)    
Environment      694.98  694.98     1 71.747  8.2893  0.005252 ** 
Year              35.83   35.83     1 68.952  0.4274  0.515462    
Sex             1352.68 1352.68     1 24.986 16.1342  0.000475 ***
N100            1808.38 1808.38     1 54.298 21.5695 2.208e-05 ***
Environment:Sex  460.60  460.60     1 26.047  5.4939  0.026986 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


When using 95% MCPs, male home ranges reduced by 25% and female range by 31%. At Owl Head Buttes, Gila Monsters showed a similar behavior with male home ranges reduced by 20% and female ranges reduced by 26% using 95% MCPs. The affect of sample size was also removed in the 95% MCP analysis. Since there was no indication for major exploritory movements exhibited among males, and similar patterns observed among the Owl Head population, 100% MCPs were used for further analyses.


ANOVA Table: 95% MCP

Type III Analysis of Variance Table with Satterthwaite's method
                Sum Sq Mean Sq NumDF  DenDF F value    Pr(>F)    
Environment     446.23  446.23     1 60.695 29.3887 1.082e-06 ***
Year             13.48   13.48     1 38.036  0.8881  0.351936    
Sex             434.50  434.50     1 30.019 28.6161 8.668e-06 ***
N100             14.60   14.60     1 38.688  0.9615  0.332901    
Environment:Sex 150.03  150.03     1 30.818  9.8810  0.003679 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Table 3 | Directional means of home range (100% MCP) after being adjusted for year, sex and sample size.
Environment Sex lsmean SE df lower.CL upper.CL
nonsubsidized female 23.854550 6.075784 67.58405 11.729161 35.97994
subsidized female 8.282187 3.264559 47.72714 1.717382 14.84699
nonsubsidized male 43.526364 6.124718 67.15400 31.301891 55.75084
subsidized male 13.402930 4.049249 53.61811 5.283351 21.52251


Post-Hoc comparisons between sexes and environment 100% MCP:

Post-Hoc analyses between sexes indicated that there was a significant difference in male home ranges between the two environments (df = 68.3, P = 0.001). There was a slight difference of female home ranges between the two environments, however it was not statistically significant (df = 68.7, P = 0.07). At stone canyon there was no major difference between male and female home ranges (df = 31.8, P = 0.16) with male home range being only 3% larger than females. Males at Owl Head Buttes had a 65% larger home range than did females, and was statistically significant (df = 31.6, P = 0.0003). Interestingly, males at Stone Canyon had smaller home ranges than did the females at Owl Head Buttes (Table x).


Graphical Comparisons of Sex Within Each Environment:

Figure 6 | Pairwise comparisons of home range between sexes within each environment. If red arrows overlap those of others, then there is no significant statistical difference.


Graphical Comparisons of Sex between the two populations:

Figure 7 | Pairwise comparisons of sex between environments. If red arrows overlap those of others, then there is no significant statistical difference.


Figure 8 | Interactive map: Home Range overlap by sex of 100% MCPs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.


Overall Home Range Comparisons KDE:

Home range estimation on the Stone Canyon Gila Monsters using 95% KDEs with href bandwidth produced male home ranges ranging from 14.5 – 55.3 ha with a mean of 35.0 ± 3.1 S.E. ha. Female home ranges ranged from 10.1 – 47.8 ha with a mean of 23.0 ± 1.8 S.E. KDE estimates for male and female home ranges were 96% and 80% larger respectively than MCP estimates. Repeated Measures analysis of KDEs suggested that there was a significant difference between male and female home ranges at Stone Canyon (F = 8.88, P = 0.008). There was not an affect of year on home ranges (F = 0.59, P = 0.44).


Table 4 | Raw Group 95% KDE home range means male and female home ranges at Stone Canyon.
Sex N Home_Range_95kde sd se ci
female 37 22.98892 11.04627 1.815996 3.683010
male 13 35.00308 12.05755 3.344161 7.286302


Repeated measures ANOVA for KDE Home Ranges.

ANOVA Table for 95% KDE (subsidized)

Type III Analysis of Variance Table with Satterthwaite's method
     Sum Sq Mean Sq NumDF  DenDF F value   Pr(>F)   
Year  33.20   33.20     1 40.016  0.5720 0.453900   
Sex  496.66  496.66     1 17.763  8.5562 0.009132 **
N     21.33   21.33     1 37.608  0.3675 0.548005   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Male 50% KDE home ranges ranges averaged 9.0 ± 0.8 S.E. ha., female home ranges averaged 5.6 ± 0.5 S.E. Repeated Measures analysis of 50% KDEs suggested that there was still a significant difference between male and female home ranges at Stone Canyon (F = 6.36, P = 0.01). There was not an affect of year on home ranges (F = 0.06, P = 0.79).


Table 5 | Raw Group 50% KDE home range means male and female home ranges at Stone Canyon.
Sex N Home_Range_50kde sd se ci
female 39 5.951026 3.227109 0.5167510 1.046108
male 14 9.031429 3.148721 0.8415311 1.818017

ANOVA Table for 50% KDE (subsidized)

Type III Analysis of Variance Table with Satterthwaite's method
      Sum Sq Mean Sq NumDF  DenDF F value  Pr(>F)  
Year  1.0722  1.0722     1 45.036  0.1779 0.67521  
Sex  20.3328 20.3328     1 27.339  3.3731 0.07717 .
N     9.6543  9.6543     1 42.628  1.6016 0.21255  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Figure 10 | Interactive map: Home Range overlap by sex of 95% KDEs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.


Seasonal Home Range

Seasons were categorized based on criteria that were both ecologically applicable to Gila Monsters and comparable to other studies. Five distinct ecologically relevant “seasons” were used to characterize Gila Monster activity patterns: winter, emergence, dry, monsoon, and post-monsoon. The winter season was characterized by an inconspicuous interval of inactivity at a single location. This location was assumed to be an overwintering refuge which are typically burrows under rocks within rocky buttes in proximity of reach in an animal’s range of activity. Emergence is marked by an increase of activity when the lizards emerge from their winter refuges. During this time of increased activity, movements are often over short distances and are relatively infrequent. Based on the activity patterns of animals within buttes at Owl Head, the end of the emergence season was marked when animals migrated to the desert flats. This movement is often presumed to be a response due to environmental cues. Stone Canyon does not possess buttes, and due to the relative habitat homogeneity of rocky outcrops throughout the golf course, animal “migration” or movements in response to environmental cues are a bit more inconspicuous. The end of emergence at Stone Canyon was based on a pronounced increase in animal movements over greater distances and frequency. Over the entire study period between both environments, the emergence season ranged from March 13th through April 16th. The dry season was defined starting at the end of emergence through the onset of the monsoon season. The dry season interval for both environments across both study periods was April 2nd through July 18th. The monsoon season is officially defined by the National Weather Service starting June 15th and ending September 30th. However, this seasonal time interval is ecologically irreverent to Gila Monsters. Gila Monster activity is triggered by environmental cues, and since the monsoon rains vary across years, the categorization of the monsoon season should be modified to reflect the ecological start date to which Gila Monsters will be sensitive. The monsoon season was determined by using NOAA adjusted monsoon dates, which starts on the first day when the average of dew point temperatures was greater than 55 degrees Fahrenheit across three consecutive days and ending on September 30th. The monsoon interval for both environments throughout the study period ranged from June 17th through September 30th. The post-monsoon season affectively marks the transition from the monsoon to the winter seasons, during which Gila Monster activity is largely reduced to smaller scale movements and tend to be reduced to smaller ranges within proximity of previous hibernacula. Post-monsoon season extends from the end of the monsoon (September 30th) to the winter months when Gila Monster activity essentially ceases at a single location. For both environments throughout each study period, the post-monsoon ranged from October 1st through December 14th.

Scaling home range analyses by seasonal estimates reduces the number of locations for each lizard. 100% MCPs were used for seasonal home range analyses to avoid any further reduction of locations for each estimation. For seasonal variation in home range sizes, a Mixed Effects RMANOVA was performed to examine the effects of year. Post-Hoc pairwise comparisons using Tukey adjusted p-values were performed examine where significant differences took place.


Error in eval(`_inherit`, env, NULL) : object 'ScalesList' not found


Seasonal home ranges at Stone Canyon varied in size between seasons but did not seem shift (Fig. 11), with seasonal home ranges overlapping each other, only expanding or collapsing between seasons. Home range patterns at Stone Canyon did not display the same seasonal variation in home range sizes that was observed at Owl Head Buttes. At Stone Canyon, Gila Monsters had relatively smaller home ranges throughout the year, where the highest inflation of range size was observed during the dry season from an increase in male home ranges, 18.3 ± 5.4 S.E. ha to that of female home range sizes at 10.2 ± 2.4 S.E. ha. Females at Stone Canyon displayed similar home ranges during the monsoon season, 10.6 ± 2.5 S.E. ha. Home range sizes at Owl Head Buttes had a much larger amount of variation across seasons than did those at Stone Canyon. There were still slightly larger ranges observed during the dry season, primarily due to increased home range sizes exhibited by males 29.4 ± 4.7 S.E. ha versus females at 15.6 ± 3.8 S.E. ha. During the monsoon season, there was still yet a large influx of home ranges sizes where female home ranges increased to 22.9 ± 4.0 S.E. ha. For both populations, home ranges during the emergence and post-monsoon seasons were small, marking the beginning and ending of overwintering periods, where minimal movement is observed in both groups.

Analysis indicated that there was an effect of season (df = 3, F = 15.41, P = <0.001) as well as an interaction of environment and season (df = 3, F = 6.84, P = <0.001), indicating that changes in seasonal home ranges sizes varied between each environment.


Table 6 | Group means of seasonal home ranges between Stone Canyon (subsidized) and Owl Head Buttes (non-subsidized). These means are averaged across sex.
Environment Season N Home_Range_100mcp sd se ci
nonsubsidized Dry 12 23.7166667 12.841682 3.7070742 8.159215
nonsubsidized Emergence 10 2.8100000 3.121414 0.9870776 2.232925
nonsubsidized Monsoon 13 23.6538462 9.446482 2.6199828 5.708452
nonsubsidized Post_Monsoon 11 0.6909091 1.013365 0.3055411 0.680788
subsidized Dry 17 13.0364706 10.574940 2.5647997 5.437133
subsidized Emergence 9 2.0977778 1.649566 0.5498555 1.267969
subsidized Monsoon 18 10.5600000 7.518662 1.7721657 3.738943
subsidized Post_Monsoon 14 2.9885714 5.044404 1.3481737 2.912552
Type III Analysis of Variance Table with Satterthwaite's method
                    Sum Sq Mean Sq NumDF  DenDF F value    Pr(>F)    
Environment         261.63  261.63     1 26.365  5.8375 0.0229042 *  
Season             2072.56  690.85     3 78.967 15.4143 5.534e-08 ***
Sex                 108.84  108.84     1 29.115  2.4285 0.1299532    
N                   335.38  335.38     1 72.754  7.4829 0.0078202 ** 
Environment:Season  920.94  306.98     3 71.524  6.8493 0.0004028 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Table 7 | Seasonal home range means between Stone Canyon (subsidized) and Owl Head Buttes (non-subsidized) popuations for males and females. These are raw means before being adjusted for environment, season, sex, and sample size.
Environment Season Sex N Home_Range_100mcp sd se ci
nonsubsidized Dry female 5 15.6600000 8.6291946 3.8590932 10.7145603
nonsubsidized Dry male 7 29.4714286 12.6476235 4.7803524 11.6971008
nonsubsidized Emergence female 5 4.4600000 3.4333657 1.5354478 4.2630866
nonsubsidized Emergence male 5 1.1600000 1.8242807 0.8158431 2.2651436
nonsubsidized Monsoon female 6 22.9833333 9.8151753 4.0070285 10.3003948
nonsubsidized Monsoon male 7 24.2285714 9.8668999 3.7293376 9.1253605
nonsubsidized Post_Monsoon female 4 1.4000000 1.4491377 0.7245688 2.3059014
nonsubsidized Post_Monsoon male 7 0.2857143 0.3670993 0.1387505 0.3395102
subsidized Dry female 11 10.1754545 8.0883118 2.4387178 5.4338018
subsidized Dry male 6 18.2816667 13.2661214 5.4158714 13.9219406
subsidized Emergence female 6 2.1133333 1.8474920 0.7542354 1.9388239
subsidized Emergence male 3 2.0666667 1.5326556 0.8848792 3.8073277
subsidized Monsoon female 11 10.6918182 8.4988679 2.5625051 5.7096172
subsidized Monsoon male 7 10.3528571 6.3010018 2.3815548 5.8274547
subsidized Post_Monsoon female 11 3.6309091 5.5527983 1.6742317 3.7304207
subsidized Post_Monsoon male 3 0.6333333 0.8007705 0.4623250 1.9892241

Adjusted Seasonal Means


Post-Hoc Analyses

Post-Hoc analyses on the Stone Canyon data set, with home range means averaged across sex, suggested that there was no significant difference in home ranges between the emergence (4.3 ± 2.6 S.E. ha) and post-monsoon seasons (5.1 ± 2.1 S.E. ha) nor dry and monsoon (12.2 ± 1.7 S.E. ha and 9.0 ± 1.8 S.E. ha). There was also no significance between emergence and dry/monsoon seasons, but there was a difference between dry and post-monsoon (df = 80.2, P = 0.04). Post-Hoc analyses on the Owl Head Buttes population indicated that there was no significant difference between emergence (3.3 ± 2.2 S.E. ha) and post-monsoon (2.4 ± 2.4 S.E.) nor dry and monsoon (18.9 ± 2.3 S.E. ha and 21.9 ± 2.0 S.E. ha) reflecting the same pattern at Stone Canyon. However, there was a significant difference between emergence and dry/monsoon (df = 69.4, P = <0.0001, and df = 68, P = <0.0001 respectively), as well as post-monsoon and dry/monsoon (df = 78.9, P = <0.0001, and df = 74, P = <0.0001). This shows a rather different pattern than seen at Stone Canyon. Pairwise analyses between the two populations indicated no difference between emergence (df = 87.7, P = 0.76) or post-monsoon (df = 89.4, P = 0.35). Differences in home range sizes between the two populations were between the dry and monsoon seasons (Fig. 14). Owl Head home ranges were 58% larger than those at Stone Canyon during the dry season, and 76% larger during the monsoon season.


Graphical Comparisons of seasons between the two populatins:

Figure 14 | Pairwise comparisons of each season between environments. Overlapping red bars indicate no statistical difference.

Graphical Comparisons between seasons within the two populations:

Figure 15 | Pairwise comparisons between seasons within each environment against estimated marginal means. Overlapping red bars indicate no statistical difference.

Graphical Comparisons between sex within the subsidized population:

Figure 16 | Stone Canyon pairwise comparisons of male and female home ranges of each season.


Graphical Comparisons between sex within the non-subsidized population:

Figure 17 | Owl Head pairwise comparisons of male and female home ranges of each season.


KDE analyses were not extended to seasonal home range analyses due to sensitivity to small sample sizes. Small sample sizes and the distribution of relocations have a profound influence on KDE outputs. KDE methods are known to overestimate home ranges with sample sizes that are smaller than adequate, as can be seen with some individuals in the above yearly home range analyses. Because analyzing seasonal home ranges results in reduced data sets, KDE outputs would exhibit large unreasonable inflations in home ranges. 


Home Range Overlap (MCP)

The Stone Canyon population seems to exhibit greater female-female overlap as well as considerable overlap of male-female home ranges. There appears to be limited male-male overlap, with occurance happening in only two male-male home range polygons. This finding is in contrast to the Owl Head buttes study which revealed that there was a large degree of overlap among male-female and male-male overlaps (Table 8). Gillardo concluded that, in their study, the high degree of overlap in males-males interactions may be due to having larger home ranges for mate searching activities. Males may have and increased home range size to maximize their access to multiple females. She concluded that the lack of female-female overlap may be due to smaller home range sizes.

At Stone Canyon, males have reduced home range sizes (Table 3; Fig. 5). However, males still retain home range overlap with multiple females while having reduced contact with other males. This may be in response to nutrient subsidies that reduce the need to have expanded home range sizes for foraging activities for both males and females. There may also be a higher density of females as a response to resource availability and reduced range requirements. Males are not forced to expand home ranges for mate searching to the extant that individuals at Owl Head Buttes may be subject to.


Table 8 | Home range overlap of Gila Monsters at the nutrient subsidized site. Male-male overlaps only occured between two pairs of males: M14-M69 and M119-M215 at 0.5 ha. and 19.5 ha. respectively and were therefore not included in the table..
ID F36 F66 F104 F135 F137 F146 F147 X M14 M67 M69 M112 M119 M215 M255
Female:Female Male:Female
F36 _ 5.13 _ _ _ 4.65 _ _ _ _ _ 19.44 18.51 _
F66 5.13 _ _ _ _ 5.05 _ _ _ 2.6 _ _ _ _
F104 _ _ _ 0.5 _ _ _ _ _ _ _ _ _
F114 _ _ _ _ _ _ _ _ _ _ 5.82 _ _ _
F135 _ _ 0.5 _ 2.89 _ 3.94 _ _ 2.04 _ _ _ _
F137 _ _ _ 2.89 _ _ 7.91 _ _ 0.55 _ _ _ _
F146 4.65 5.05 _ _ _ _ _ 0.14 _ 0.76 _ _ _ _
F147 _ _ _ 3.94 7.91 _ _ 3.73 0.21 4.6 _ _ _ _
F200 _ _ _ _ _ _ _ _ _ _ 6.49 _ _ _
F252 _ _ _ _ _ _ _ _ _ _ _ _ _ 3.45

Mean = 4.3 ± 0.86 Mean = 5.26 ± 1.78

ID F36 F66 F104 F135 F137 F146 F147 M14 M67 M69 M112 M119 M215 M255 Female:Female Male:Female
Net 6.84 7.25 0.5 4.44 7.91 6.77 8.96 3.87 0.21 8.57 12.31 21.24 20.32 3.45 Prportion 0.2 0.2 0.1 0.5 1 0.7 0.3 0.4 0.02 0.5 0.4 0.6 1 0.2

Table 9 | Summary of home range overlap.
Interaction N OL sd se ci
Female_Female 7 4.295714 2.271694 0.8586198 2.100967
Male_Female 13 5.256923 6.429806 1.7833074 3.885493
Male_Male 4 9.980000 10.958108 5.4790541 17.436795

Home Range Overlap (KDE)

LS0tCnRpdGxlOiAiU3BhdGlhbCBFY29sb2d5IG9mIEdpbGEgTW9uc3RlcnMgaW4gYSBTdWJzaWRpemVkIFJlc291cmNlIEVudmlyb25tZW50IgphdXRob3I6ICJQaWVyc29uLCBNLlQuLCBHaWVuZ2VyLCBDLk0uLCBEZU5hcmRvLCBELkYuLCBQYXJrZXIsIE0uLCBHYWxsYXJkbywgTC4sIEdvb2RlLCBNLiwgR2VudHJ5LCBDLk0uIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICBkZl9wcmludDogcGFnZWQKICByb3dzLnByaW50OiAxMAogIHRoZW1lOiBjb3NtbwogIGhpZ2hsaWdodDogYnJlZXplZGFyawogIG51bWJlcl9zZWN0aW9uczogeWVzCiAgdG9jOiB0cnVlCiAgdG9jX2Zsb2F0OgogICAgY29sbGFwc2VkOiBmYWxzZQogICAgc21vb3RoX3Njcm9sbDogdHJ1ZQpwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKZWRpdG9yX29wdGlvbnM6IApjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKaDEudGl0bGUgewogIGZvbnQtc2l6ZTogNDBweDsKICBmb250LWZhbWlseTogIkNhbGlicmkiLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogIGZvbnQtc2l6ZTogMjBweDsKICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICBjb2xvcjogRGFya0JsdWU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cjwvc3R5bGU+Cgo8YnI+CgohW0dpbGEgU3Vuc2V0XShHSUxBU1VOU0VULnBuZykKCjxicj4KCiMgQUJTVFJBQ1QgCkFuaW1hbCBtb3ZlbWVudHMgYXJlIG9mdGVuIGRlZmluZWQgdXNpbmcgdGhlIGhvbWUgcmFuZ2UgY29uY2VwdC4gQ29uc2VxdWVudGx5LCBob21lIHJhbmdlcyBhcmUgZGV0ZXJtaW5lZCBieSB0ZW1wb3JhbCwgc3BhdGlhbCwgYW5kIGluZGl2aWR1YWwtbGV2ZWwgcHJvY2Vzc2VzLiBXaXRoaW4gdGhlIGVudmlyb25tZW50LCBvbmUgb2YgdGhlIGtleSBmYWN0b3JzIGluZmx1ZW5jaW5nIGFuIGFuaW1hbOKAmXMgcmFuZ2UgYW5kIGhvdyBpdCB1c2VzIHRoZSBlbnZpcm9ubWVudCBpcyB0aGF0IG9mIHJlc291cmNlcy4gQWx0ZXJhdGlvbnMgdG8gdGhlIGVudmlyb25tZW50IHRoYXQgYWZmZWN0IHJlc291cmNlIGRpc3RyaWJ1dGlvbiBhbmQgYXZhaWxhYmlsaXR5IGNhbiBoYXZlIHByb2ZvdW5kIGNvbnNlcXVlbmNlcyBvbiBhbiBhbmltYWzigJlzIHNwYXRpYWwgcGF0dGVybnMuIE9uZSBvZiB0aGUgYmVzdCBleGFtcGxlcyBvZiB0aGlzIGlzIHRoYXQgb2YgZ29sZiBjb3Vyc2VzLiBDZXJ0YWluIGVudmlyb25tZW50YWwgbW9kaWZpY2F0aW9ucyBleGhpYml0ZWQgYnkgc29tZSBodW1hbiBhbHRlcmVkIGVudmlyb25tZW50cyBjYW4gaGF2ZSBwb3NpdGl2ZSBlZmZlY3RzIG9uIGNlcnRhaW4gd2lsZGxpZmUgc3BlY2llcyBieSBhbHRlcmluZyB0aGVpciBtb3ZlbWVudCBwYXR0ZXJucyBhbmQgZm9yYWdpbmcgZWZmb3J0cy4gV2UgYW5hbHl6ZWQgZGF0YSBjb2xsZWN0ZWQgZnJvbSAyMiBHaWxhIE1vbnN0ZXJzICpIZWxvZGVybWEgc3VzcGVjdHVtKiBhdCBhIHN1YnNpZGl6ZWQgZW52aXJvbm1lbnQgaW4gQXJpem9uYSBmcm9tIDIwMDcgdG8gMjAxMyBhbmQgMTUgR2lsYSBNb25zdGVycyBmcm9tIGEgbm9uLXN1YnNpZGl6ZWQgZW52aXJvbm1lbnQgZnJvbSAyMDAwIHRvIDIwMDIuIFdlIHBlcmZvcm1lZCBib3RoIGtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gYW5kIG1pbmltdW0gY29udmV4IHBvbHlnb25zIGZvciBjb21wYXJhYmlsaXR5IHB1cnBvc2VzLiBBZnRlciBhZGp1c3RpbmcgYXJlYSBlc3RpbWF0ZXMgZm9yIHNleCwgbnVtYmVyIG9mIGZpeGVzLCBhbmQgeWVhciwgbWFsZXMgaW4gdGhlIHN1YnNpZGl6ZWQgZW52aXJvbm1lbnQgaGFkIGFuIGF2ZXJhZ2Ugb3ZlcmFsbCBhcmVhIG9mIDEzLjYgaGEgd2hpbGUgdGhlIGZlbWFsZXMgaGFkIGFuIGFyZWEgb2YgOC4zIGhhLiBJbiB0aGUgdW5zdWJzaWRpemVkIGVudmlyb25tZW50LCBtYWxlcyBoYWQgYW4gYXZlcmFnZSBvdmVyYWxsIGFyZWEgb2YgNDMuMiBoYSB3aGlsZSBmZW1hbGVzIGhhZCBhbiBhcmVhIG9mIDIzLjYgaGEuIEdpbGEgTW9uc3RlcnMgYmV0d2VlbiB0aGUgdHdvIGVudmlyb25tZW50cyBhbHNvIGV4aGliaXRlZCBzZWFzb25hbCBkaWZmZXJlbmNlcywgcHJpbWFyaWx5IGluIHRoZSBkcnkgYW5kIG1vbnNvb24gc2Vhc29ucy4gVGhlcmUgd2VyZSBhbHNvIGRpZmZlcmVuY2VzIGluIGhvbWUgcmFuZ2Ugb3ZlcmxhcCB3aXRoaW4gYW5kIGJldHdlZW4gc2V4ZXMuIEluIHRoZSBzdWJzaWRpemVkIHBvcHVsYXRpb24sIHRoZXJlIHdhcyB2ZXJ5IGxpdHRsZSBtYWxlLW1hbGUgb3ZlcmxhcCB3aXRoIG9ubHkgdHdvIG9jY3VyYW5jZXMsIG1vcmUgZmVtYWxlLWZlbWFsZSBvdmVybGFwIGFuZCBtYWxlLWZlbWFsZSBvdmVybGFwIHdhcyBpbmNyZWFzZWQuIE1hbGUgaG9tZSByYW5nZXMgb2Z0ZW4gb3ZlcmxhcHBlZCBzZXZlcmFsIGZlbWFsZSBob21lIHJhbmdlcy4gVGhpcyBzdWdnZXN0cyB0aGF0IEdpbGEgbW9uc3RlciBob21lIHJhbmdlcyBtYXkgYmUgc21hbGxlciBpbiBzdWJzaWRpemVkIHJlc291cmNlIGVudmlyb25tZW50cyB0aGFuIHRob3NlIG9mIHVuLXN1YnNpZGl6ZWQgZW52aXJvbm1lbnRzIGR1ZSB0byBpbmNyZWFzZXMgaW4gYXZhaWxhYmxlIHJlc291cmNlcy4KCjxicj4KCgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CiMgTE9BRCBQQUNLQUdFUyAKCmxpYnJhcnkodGlkeXZlcnNlKSAKbGlicmFyeShrbml0cikgIyAgbWFrZSB0YWJsZXMKbGlicmFyeShsZWFmbGV0KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZ2dwbG90MikKIyBsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdnZm9ydGlmeSkKbGlicmFyeShvcmRpbmFsKQpsaWJyYXJ5KGxzbWVhbnMpCmxpYnJhcnkoZW1tZWFucykKbGlicmFyeShtYXB2aWV3KQpsaWJyYXJ5KGFkZWhhYml0YXRIUikKIyBsaWJyYXJ5KE9wZW5TdHJlZXRNYXApCmxpYnJhcnkoZ2dtYXApCiNrbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDEvMykgI2ZvcmNlIGZpZ3VyZXMgdG8gYmUgY2VydGFpbiBzaXplIGFuZCBhc3BlY3QgcmF0aW8KYGBgCgoKCiMgR2lsYSBNb25zdGVycyAoKkhlbG9kZXJtYSBzdXNwZWN0dW0qKSBhbmQgSHVtYW4gQWx0ZXJlZCBFbnZpcm9ubWVudHMKPHA+CiAgQW5pbWFsIG1vdmVtZW50cyBhcmUgb2Z0ZW4gZGVmaW5lZCB1c2luZyB0aGUgaG9tZSByYW5nZSBjb25jZXB0LiBGb3JtYWxseSBkZWZpbmVkIGJ5IFdpbGxpYW0gQnVyayBpbiAxOTQzIGFzLCAidGhhdCBhcmVhIHRyYXZlcnNlZCBieSB0aGUgaW5kaXZpZHVhbCBpbiBpdHMgbm9ybWFsIGFjdGl2aXRpZXMgb2YgZm9yYWdpbmcsIG1hdGluZywgYW5kIGNhcmluZyBmb3IgeW91bmcuIE9jY2FzaW9uYWwgc2FsbGllcyBvdXRzaWRlIHRoZSBhcmVhLCBwZXJoYXBzIGV4cGxvcmF0b3J5IGluIG5hdHVyZSwgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGhvbWUgcmFuZ2UiLiBDb25zZXF1ZW50bHksIGhvbWUgcmFuZ2VzIGFyZSBkZXRlcm1pbmVkIGJ5IHRlbXBvcmFsLCBzcGF0aWFsLCBhbmQgaW5kaXZpZHVhbC1sZXZlbCBwcm9jZXNzZXMuIFN0dWR5aW5nIGFuaW1hbCBIUuKAmXMgaGFzIGJlZW4gb2Ygc3BlY2lhbCBpbnRlcmVzdCB0byBhIHdpZGUgdmFyaWV0eSBvZiByZXNlYXJjaGVycywgaW5jbHVkaW5nIHRob3NlIHN0dWR5aW5nIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBiZWhhdmlvciwgYWdlLCBzZXgsIGFuZCBzcGFjaW5nIHBhdHRlcm5zLCByZXNvdXJjZSBkaXN0cmlidXRpb24gYXMgaXQgYWZmZWN0cyBzcGFjZSB1c2UsIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtZXRhYm9saWMgcmVxdWlyZW1lbnRzIGFuZCBob21lIHJhbmdlIHNpemUsIGFuZCBzcGFjZSByZXF1aXJlbWVudHMgZm9yIHB1cnBvc2VzIG9mIGNvbnRyb2xsaW5nIHByb2JsZW1hdGljIHNwZWNpZXMsIGNvbnNlcnZhdGlvbiwgYW5kIHdpbGRsaWZlIG1hbmFnZW1lbnQuICAKPHA+CiAgV2l0aGluIGFuIGFuaW1hbHMgZW52aXJvbm1lbnQsIG9uZSBvZiB0aGUga2V5IGZhY3RvcnMgaW5mbHVlbmNpbmcgYW4gYW5pbWFscyByYW5nZSBhbmQgaG93IGl0IHVzZXMgdGhlIGVudmlyb25tZW50IGlzIHRoYXQgb2YgcmVzb3VyY2VzLiAgQWx0ZXJhdGlvbnMgdG8gdGhlIGVudmlyb25tZW50IHRoYXQgYWZmZWN0IHJlc291cmNlIGRpc3RyaWJ1dGlvbiBhbmQgYXZhaWxhYmlsaXR5IGNhbiBoYXZlIHByb2ZvdW5kIGNvbnNlcXVlbmNlcyBvbiBhbiBhbmltYWxzIHNwYXRpYWwgcGF0dGVybnMuIFNvbWUgb2YgdGhlIGJlc3QgZXhhbXBsZXMgb2YgdGhpcyBhcmUgYWx0ZXJhdGlvbnMgY2F1c2VkIGJ5IGh1bWFuIGFjdGl2aXRpZXMuICBIaXN0b3JpY2FsbHksIGh1bWFuIGFsdGVyYXRpb25zIHRvIGVudmlyb25tZW50cyBoYXZlIGJlZW4gcGVyY2lldmVkIGFzIGhhdmluZyBuZWdhdGl2ZSBjb25zZXF1ZW5jZXMgb24gbG9jYWwgd2lsZGxpZmUgcG9wdWxhdGlvbnMuIEhvd2V2ZXIsIGNlcnRhaW4gZW52aXJvbm1lbnRhbCBtb2RpZmljYXRpb25zIGNhbiBoYXZlIHBvc2l0aXZlIGVmZmVjdHMgb24gdmFyaW91cyB3aWxkbGlmZSBzcGVjaWVzLiBUaGlzIGlzIHNlZW4gaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIGNlcnRhaW4gZ29sZiBjb3Vyc2VzLCBhbmQgZ3JlZW4gYXJlYXMuIE9uZSBvZiB0aGUga2V5IGNvbnNlcXVlbmNlcyBvZiBnb2xmIGNvdXJzZXMsIGVzcGVjaWFsbHkgdGhvc2UgcGxhY2VkIGluIGRlc2VydCBlbnZpcm9ubWVudHMgaXMgdGhlIHdhdGVyIGlycmlnYXRpb24gc3VwcGxlbWVudGF0aW9uIGFuZCBob3J0aWN1bHR1cmUgdGhhdCBjb21lcyB3aXRoIHRoZW0uIEFzIGEgcmVzdWx0LCB0aGlzIGVuaGFuY2VzIHByaW1hcnkgcHJvZHVjdGl2aXR5IHdoaWNoIGluY3JlYXNlcyB0aGUgcHJlc2VuY2Ugb2YgdmVydGVicmF0ZSBhbmltYWxzIHRoYXQgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhhdCBpbmNyZWFzZSBpbiBwcm9kdWN0aXZpdHkuIEluIHJlcHRpbGVzLCBmYXN0ZXIgZ3Jvd3RoIGlzIG9mdGVuIGNvcnJlbGF0ZWQgd2l0aCBpbmNyZWFzZXMgaW4gcHJlY2lwaXRhdGlvbiBhbmQgYXZhaWxhYmxlIHJlc291cmNlcy4gQSBSZWNlbnQgc3R1ZHkgaGFzIHNob3duIHRoYXQgR2lsYSBNb25zdGVycyAqSGVsb2Rlcm1hIHN1c3BlY3R1bSogaW5oYWJpdGluZyBhIGdvbGYgY291cnNlIGluIHRoZSB1cGxhbmQgU29ub3JhbiBvZiBBcml6b25hIGdyZXcgbGFyZ2VyIGFuZCBmYXN0ZXIgdGhhbiB1bnN1YnNpZGl6ZWQgcG9wdWxhdGlvbnMuCjxwPgogIEdpbGEgTW9uc3RlcnMgb2NjdXB5IHRoZSBob3QgZGVzZXJ0IHJlZ2lvbnMgb2YgdGhlIE1vaGF2ZSBEZXNlcnQgaW4gdGhlIGV4dHJlbWUgc291dGhlYXN0ZXJuICBOZXZhZGEsIHNvdXRoIHRocm91Z2ggdGhlIFNvbm9yYW4gRGVzZXJ0IG9mIEFyaXpvbmEgaW50byBTb25vcmEgYW5kIG5vcnRoZXJuIFNpbmFsb2EsIE1leGljby4gR2lsYXMgYXJlIGtub3duIHRvIGJlIOKAnHdpZGVseSBmb3JhZ2luZ+KAnSBhbmltYWxzIGR1ZSB0byB0aGVpciBzcGVjaWFsaXphdGlvbiBpbiBmZWVkaW5nIG9uIHRoZSB5b3VuZyBhbmQgZWdncyBvZiBzbWFsbCB2ZXJ0ZWJyYXRlIG5lc3RzLiBUaGVzZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGZpbmRpbmdzIG1ha2UgdGhpcyBzcGVjaWVzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN0dWR5aW5nIHRoZSBwb3RlbnRpYWwgYWx0ZXJhdGlvbnMgdG8gYW5pbWFsIGhvbWUgcmFuZ2VzIHRoYXQgbnV0cmllbnQgc3Vic2lkaXplZCBhcmVhcyBzdWNoIGFzIGdvbGYgY291cnNlcyBtYXkgaGF2ZSBvbiBhbmltYWwgcG9wdWxhdGlvbnMuIAo8cD4KCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KGRpc21vKQpsaWJyYXJ5KHJnYmlmKQpsaWJyYXJ5KHV0aWxzKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShzcG90aWZ5cikKbGlicmFyeShnZ3JpZGdlcykKbGlicmFyeSh2aXJpZGlzKQpsaWJyYXJ5KHJhc3RlclZpcykKCiMjIFVTSU5HIERJU01POgojIGV4dGVudCA8LSBleHRlbnQoLTEzMCwtNzAsMjAsNjApCgpILnN1c3AgPC0gZ2JpZigiaGVsb2Rlcm1hIiwgc3BlY2llcyA9ICJzdXNwZWN0dW0iLCBleHQgPSBleHRlbnQsCiAgICAgICAgICAgICBnZW8gPSBUUlVFLCBzcCA9IFRSVUUsIGRvd25sb2FkID0gVFJVRSwKICAgICAgICAgICAgIHJlbW92ZVplcm9zID0gVFJVRSkKCkguc3VzcF94eSA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKEguc3VzcEBjb29yZHNbLDFdLEguc3VzcEBjb29yZHNbLDJdKSkKY29sbmFtZXMoSC5zdXNwX3h5KSA8LSBjKCJsb25naXR1ZGUiLCJsYXRpdHVkZSIpCgojIHVzIDwtIG1hcF9kYXRhKCJzdGF0ZSIpCgojIGdncGxvdChkYXRhID0gSC5zdXNwX3h5LCBhZXMoeD1sb25naXR1ZGUsIHk9bGF0aXR1ZGUpKSArCiMgICBnZW9tX3BvbHlnb24oZGF0YSA9IHVzLCBhZXMoeD1sb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKIyAgICAgICAgICAgICAgICBmaWxsID0gIndoaXRlIiwgY29sb3I9ImJsYWNrIikgKwojICAgZ2VvbV9wb2ludCgpICsgeGxhYigiTG9uZ2l0dWRlIikgKyB5bGFiKCJMYXRpdHVkZSIpICsKIyAgIGNvb3JkX2ZpeGVkKHhsaW0gPSBjKC0xMjAsLTEwNiksIHlsaW0gPSBjKDMwLDQxKSkKCiMjICBVU0lORyBSR0JJRjoKSC5zdXNwX2x1IDwtIG5hbWVfbG9va3VwKHF1ZXJ5ID0gJ2hlbG9kZXJtYSBzdXNwZWN0dW0nLCByZXR1cm4gPSAnZGF0YScpCgpILnN1c3BfY29kZSA8LSBwcmludChhcy5pbnRlZ2VyKG5hbWVzKHdoaWNoLm1heCh0YWJsZShILnN1c3BfbHUkbnViS2V5KSkpKSkKCiMgb2NjX2NvdW50KHRheG9uS2V5ID0gSC5zdXNwX2NvZGUsIGdlb3JlZmVyZW5jZWQgPSBUUlVFKQoKdXNhIDwtIGlzb2NvZGVzW2dyZXAoIlVuaXRlZCBTdGF0ZXMiLCBpc29jb2RlcyRuYW1lKSwgImNvZGUiXQptZXggPC0gaXNvY29kZXNbZ3JlcCgiTWV4aWNvIiwgaXNvY29kZXMkbmFtZSksICJjb2RlIl0KCkguc3VzcF9kYXRhIDwtIG9jY19zZWFyY2godGF4b25LZXkgPSBILnN1c3BfY29kZSwgCiAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAnZGF0YScsIAogICAgICAgICAgICAgICAgICAgY291bnRyeSA9IHVzYSwKICAgICAgICAgICAgICAgICAgIGhhc0Nvb3JkaW5hdGUgPSBUUlVFKQoKSC5zdXNwX2RhdGEubWV4IDwtIG9jY19zZWFyY2godGF4b25LZXkgPSBILnN1c3BfY29kZSwgCiAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAnZGF0YScsIAogICAgICAgICAgICAgICAgICAgY291bnRyeSA9IG1leCwKICAgICAgICAgICAgICAgICAgIGhhc0Nvb3JkaW5hdGUgPSBUUlVFKQoKSC5zdXNwX2RmIDwtIGFzLmRhdGEuZnJhbWUoY2JpbmQoSC5zdXNwX2RhdGEkVVMkc2NpZW50aWZpY05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnN1c3BfZGF0YSRVUyRpbnN0aXR1dGlvbkNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnN1c3BfZGF0YSRVUyRzdGF0ZVByb3ZpbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC5zdXNwX2RhdGEkVVMkdmVyYmF0aW1Mb2NhbGl0eSkpCgpILnN1c3BfZGYubWV4IDwtIGFzLmRhdGEuZnJhbWUoY2JpbmQoSC5zdXNwX2RhdGEubWV4JHNjaWVudGlmaWNOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC5zdXNwX2RhdGEubWV4JGluc3RpdHV0aW9uQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEguc3VzcF9kYXRhLm1leCRzdGF0ZVByb3ZpbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC5zdXNwX2RhdGEubWV4JHZlcmJhdGltTG9jYWxpdHkpKQoKSC5zdXNwX2RmLnVzbWV4IDwtIGFzLmRhdGEuZnJhbWUocmJpbmQoSC5zdXNwX2RmLEguc3VzcF9kZi5tZXgpKQoKCmNvb3JkcyA8LSBjYmluZCh0eXBlLmNvbnZlcnQoSC5zdXNwX2RhdGFbWyJVUyJdXVtbImRlY2ltYWxMb25naXR1ZGUiXV0sIGFzLmlzID0gVFJVRSksCiAgICAgICAgICAgICAgICB0eXBlLmNvbnZlcnQoSC5zdXNwX2RhdGFbWyJVUyJdXVtbImRlY2ltYWxMYXRpdHVkZSJdXSwgYXMuaXMgPSBUUlVFKSkKCmNvb3Jkcy5tZXggPC0gY2JpbmQodHlwZS5jb252ZXJ0KEguc3VzcF9kYXRhLm1leFtbImRlY2ltYWxMb25naXR1ZGUiXV0sIGFzLmlzID0gVFJVRSksCiAgICAgICAgICAgICAgICB0eXBlLmNvbnZlcnQoSC5zdXNwX2RhdGEubWV4W1siZGVjaW1hbExhdGl0dWRlIl1dLCBhcy5pcyA9IFRSVUUpKQoKY29vcmRzIDwtICByYmluZChjb29yZHMsY29vcmRzLm1leCkKCgpILnN1c3BfaW5mbyA8LSBjYmluZChILnN1c3BfZGYudXNtZXgsY29vcmRzKQoKY29sbmFtZXMoSC5zdXNwX2luZm8pIDwtIGMoInNwZWNpZXMiLCJkYXRhc2V0Iiwic3RhdGUiLCJsb2NhdGlvbiIsImxvbmdpdHVkZSIsImxhdGl0dWRlIikKCndvcmxkIDwtIG1hcF9kYXRhKCJ3b3JsZCIpCnN0YXRlcyA8LSBtYXBfZGF0YSgic3RhdGUiKQpjb3VudGllcyA8LSBtYXBfZGF0YSgiY291bnR5IikKCmNvdW50aWVzJHBvbHluYW1lIDwtIHBhc3RlKGNvdW50aWVzJHJlZ2lvbiwgY291bnRpZXMkc3VicmVnaW9uLCBzZXAgPSAiLCIpCiMgY291bnRpZXMgPC0gY291bnRpZXMgJT4lIGxlZnRfam9pbihmaXBzLCBieSA9IGMoInBvbHluYW1lIiA9ICJwb2x5bmFtZSIpKQojIGNvdW50aWVzJGZpcHMgPC0gYXMuY2hhcmFjdGVyKGNvdW50aWVzJGZpcHMpCgpzb3V0aHdlc3Rlcm5fc3RhdGVzIDwtIHN1YnNldChzdGF0ZXMsIHJlZ2lvbiAlaW4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiYXJpem9uYSIsICJjYWxpZm9ybmlhIiwgInV0YWgiLCAibmV2YWRhIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgbWV4aWNvIiwgImNvbG9yYWRvIiwidGV4YXMiLCJva2xhaG9tYSIsImthbnNhcyIpKQoKc291dGh3ZXN0ZXJuX2NvdW50aWVzIDwtIHN1YnNldChjb3VudGllcywgcmVnaW9uICVpbiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoImFyaXpvbmEiLCAiY2FsaWZvcm5pYSIsICJ1dGFoIiwgIm5ldmFkYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgbWV4aWNvIiwgImNvbG9yYWRvIiwidGV4YXMiLCJva2xhaG9tYSIsImthbnNhcyIpKQoKbGlicmFyeShyYXN0ZXIpCnByb3ZpbmNlcyA8LSBjKCJTb25vcmEiLCJTaW5hbG9hIikKCm1leGljbyA8LSBnZXREYXRhKCJHQURNIixjb3VudHJ5PSJNRVgiLGxldmVsPTEpCgptZXgucHJvdmluY2VzIDwtIG1leGljb1ttZXhpY28kTkFNRV8xICVpbiUgcHJvdmluY2VzLF0KCmdncGxvdChkYXRhID0gSC5zdXNwX2luZm8sIGFlcyh4PWxvbmdpdHVkZSwgeT1sYXRpdHVkZSkpICsgCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB3b3JsZCwgYWVzKHg9bG9uZyx5PWxhdCwgZ3JvdXA9Z3JvdXApLCBmaWxsID0gImdyYXkiLCBjb2xvciA9IndoaXRlIikrCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSBzdGF0ZXMsIGFlcyh4PWxvbmcseT1sYXQsIGdyb3VwPWdyb3VwKSwgZmlsbCA9ICJncmF5IiwgY29sb3IgPSAid2hpdGUiKSsKICAjIGdlb21fcG9seWdvbihkYXRhID0gZmxfcG9seSwgYWVzKHg9bG9uZywgeT1sYXQsIGdyb3VwPWdyb3VwLCBmaWxsID0gZmlsbCkpICAKICBnZW9tX3BvbHlnb24oZGF0YSA9IHNvdXRod2VzdGVybl9zdGF0ZXMsIGFlcyh4PWxvbmcseT1sYXQsIGdyb3VwPWdyb3VwKSwgZmlsbCA9IE5BLAogICAgICAgICAgICAgICBjb2xvcj0id2hpdGUiKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSBzb3V0aHdlc3Rlcm5fY291bnRpZXMsIGFlcyh4PWxvbmcseT1sYXQsIGdyb3VwPWdyb3VwKSwgZmlsbCA9IE5BLCAKICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4wNSkgKwogIGdlb21fcG9seWdvbihkYXRhPW1leC5wcm92aW5jZXMsIGFlcyh4PWxvbmcseT1sYXQsIGdyb3VwPWdyb3VwKSwgZmlsbCA9ICJncmF5IiwgCiAgICAgICAgICAgICAgIGNvbG9yID0id2hpdGUiKSArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBzdGF0ZSksIHNpemU9MSkgKwogIGNvb3JkX21hcCgiY29uaWMiLCBsYXQwID0gMzAsIHhsaW09YygtMTE5LC05OCksIHlsaW09YygyMywzOCkpICsKICBzY2FsZV9maWxsX2lkZW50aXR5KCkgKwogIHRoZW1lX2dyZXkoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0icmlnaHQiKSArIHRoZW1lKGxlZ2VuZC50aXRsZS5hbGlnbj0wLjUpICsKICB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAnZGVlcHNreWJsdWUnKSwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9IE5BKSkgKwogIGxhYnMoeCA9ICJMb25naXR1ZGUiLCB5ID0gIkxhdGl0dWRlIiwgCiAgICAgICB0aXRsZSA9ICJHaWxhIE1vbnN0ZXIgRGlzdHJpYnV0aW9uIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpKQpgYGAKCjxicj4KCgoKIyBTdHVkeSBTaXRlCgogIEZvciB0aGUgc3Vic2lkaXplZCByZXNvdXJjZSBwb3B1bGF0aW9uIG9jY3VweWluZyBhIGh1bWFuIGFsdGVyZWQgZW52aXJvbm1lbnQsIHNwYXRpYWwgZGF0YSB3YXMgY29sbGVjdGVkIG9uIDIyIEdpbGEgTW9uc3RlcnMsIDEzIGZlbWFsZXMgYW5kIDkgbWFsZXMgYXQgU3RvbmUgQ2FueW9uIEdvbGYgQ2x1YiwgbG9jYXRlZCBpbiBQaW1hIENvdW50eSwgQXJpem9uYSBhdCB0aGUgYmFzZSBvZiB0aGUgVG9ydG9saXRhIE1vdW50YWlucy4gU3RvbmUgQ2FueW9uIGlzIGEgZ29sZiBjbHViIHdpdGggYW4gYXJlYSBvZiBhcHByb3hpbWF0ZWx5IDM0NSBoZWN0YXJlcywgY29uc2lzdGluZyBvZiB2ZWdldGF0aW9uIHRoYXQgaXMgdHlwaWNhbCBvZiBTb25vcmFuIGRlc2VydHNjcnViIGhhYml0YXQgb2YgdGhlIEFyaXpvbmEgdXBsYW5kcy4gRWxldmF0aW9uIHJhbmdlcyBmcm9tIDkwMG0tMTAwMG0sIHdpdGggdGhlIGxhbmRzY2FwZSBjb25zaXN0aW5nIG9mIGdyYW5pdGUgb3V0Y3JvcCBoaWxscyB3aXRoIGxhcmdlIGJvdWxkZXJzIHRocm91Z2hvdXQsIGludGVycnVwdGVkIGJ5IHdhdGVyZWQgZmFpcndheXMsIHBvbmRzIGFuZCBwYXZlZCBjYXJ0IHBhdGhzLiBUaGlzIGdvbGYgY291cnNlIHBvc3Nlc3NlcyBhIHBhcnRpYWxseSB1cmJhbml6ZWQgaG91c2luZyBkZXZlbG9wbWVudCB3aXRoIHByb3BlcnRpZXMgZW5jb21wYXNzaW5nIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIGNvdXJzZS4gCgogIDxicj4KCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRSwgY2FjaGU9VFJVRX0KIyBnZ21hcDo6cmVnaXN0ZXJfZ29vZ2xlKGtleSA9ICJBSXphU3lCamhoRTlwZVJCbVMxaDlXWVF4MWs1TUZfWEFYcVVmU3MiKQojIAojIHAzPC0gZ2dtYXAoZ2V0X2dvb2dsZW1hcChjZW50ZXIgPSBjKGxvbiA9IC0xMTAuOTkwODgsIGxhdCA9IDMyLjQ2ODc4KSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbSA9IDE1LCBzY2FsZSA9IDIsbWFwdHlwZSA9J3NhdGVsbGl0ZScsYXJjaGl2aW5nID0gVFJVRSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAnY29sb3InKSkKIyAKIyBwMwoKTG9uZ2l0dWRlPC1jKC0xMTAuOTc4LC0xMTAuOTc4LC0xMTAuOTgwLC0xMTAuOTgzLC0xMTAuOTg1LC0xMTAuOTg4LC0xMTAuOTkwLC0xMTAuOTk0LC0xMTAuOTk1LAogICAgICAgICAgICAgLTExMC45OTcsLTExMS4wMDMsLTExMS4wMDQsLTExMS4wMDQyLC0xMTEuMDAwLC0xMTAuOTk1LC0xMTAuOTg1LC0xMTAuOTc4LC0xMTAuOTgpCgpMYXRpdHVkZTwtYygzMi40NjMsMzIuNDYyLDMyLjQ2MiwzMi40NjEsMzIuNDYxLDMyLjQ2MCwzMi40NjIsMzIuNDY0LDMyLjQ2NiwzMi40NjgsMzIuNDY4LAogICAgICAgICAgICAzMi40NjksMzIuNDczLDMyLjQ3MzMsMzIuNDcyLDMyLjQ3NCwzMi40NzEsMzIuNDY3KQoKbXljb29yZGRhdGEgPC0gYXMuZGF0YS5mcmFtZShjYmluZChMb25naXR1ZGUsTGF0aXR1ZGUpKQoKcDMrZ2VvbV9wb2x5Z29uKGRhdGE9bXljb29yZGRhdGEsYWVzKHg9TG9uZ2l0dWRlLHk9TGF0aXR1ZGUpLGFscGhhPTAuMixjb2xvdXI9InJlZCIsCiAgICAgICAgICAgICAgICBmaWxsPSJyZWQiKSsKICAjIGdlb21fcGF0aChkYXRhPW15Y29vcmRkYXRhLGFlcyh4PUxvbmdpdHVkZSx5PUxhdGl0dWRlKSwKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91cj0id2hpdGUiLGFscGhhPTAuNCxzaXplPTIpKwogIGFubm90YXRlKCJ0ZXh0IiwgeD0tMTEwLjk4OSx5PTMyLjQ2OCxsYWJlbD0iU3RvbmUgQ2FueW9uIENsdWIiLGNvbG91cj0id2hpdGUiLHNpemU9MykrCiAgIyBzY2FsZWJhcih4Lm1pbiA9IC0xMTEuMDA1LCB4Lm1heCA9IC0xMTAuOTc1LAogICMgICAgICAgICB5Lm1pbiA9IDMyLjQ1NSwgeS5tYXggPSAzMi40ODAsIGFuY2hvciA9IE5VTEwsCiAgIyAgICAgICAgICBkaXN0ID0gNTAsIHRyYW5zZm9ybT1UUlVFLGRpc3RfdW5pdD0ibSIsIG1vZGVsID0gJ1dHUzg0JykrCiAgbGFicyh0aXRsZSA9ICJTdG9uZSBDYW55b24gU3R1ZHkgU2l0ZSBPcm8gVmFsbGV5IEFyaXpvbmEiKQpgYGAKRmlndXJlIDEgfCBTdG9uZSBDYW55b24gR29sZiBDbHViLCBsb2NhdGVkIGluIE9ybyBWYWxsZXksIEFyaXpvbmEgb24gdGhlIG5vcnRoZXJuIGVkZ2Ugb2YgVHVjc29uLCBBcml6b25hLgoKPGJyPgoKIVtTdG9uZUNhbnlvbl0ocGljdHVyZTEucG5nKXt3aWR0aD0zMDBweH0KCjxicj4KCkZvciB0aGUgY29tcGFyaXNvbiBzaXRlLCB0aGUgdW5zdWJzaWRpemVkIG5hdHVyYWwgcG9wdWxhdGlvbiB3YXMgcmVwcmVzZW50ZWQgdXNpbmcgc3BhdGlhbCBkYXRhIHRoYXQgd2FzIGNvbGxlY3RlZCBvbiAxNSBHaWxhIE1vbnN0ZXJzLCA2IG1hbGVzLCA2IGZlbWFsZXMgYW5kIDMgc3ViLWFkdWx0cyBmcm9tIDIwMDAtMjAwMiB1c2luZyByYWRpby10ZWxlbWV0cnkgYXQgT3dsIEhlYWQgQnV0dGVzLCBBcml6b25hLiBMb2NhdGVkIGluIEFyaXpvbmEgdXBsYW5kIFNvbm9yYW4gRGVzZXJ0IGFwcHJveGltYXRlbHkgMTkga20gbm9ydGggbm9ydGhlYXN0IG9mIFN0b25lIENhbnlvbiwgdGhlIE93bCBIZWFkIEJ1dHRlcyBzdHVkeSBzaXRlIHdhcyBhbiBhcmVhIG9mIGFwcHJveGltYXRlbHkgMjAwIGhlY3RhcmVzLCB3aXRoIGFuIGVsZXZhdGlvbiByYW5nZSBvZiA4MDBtLTkwMG0sIGFuZCBkaXNjb250aW51b3VzIHNvdXRoZXJuIGJ1dHRlcyBvZiByb2NreSBvdXRjcm9wcy4gT3dsIEhlYWQgaGFyYm9ycyBubyB1cmJhbml6ZWQgZGV2ZWxvcG1lbnQgb3Igb3RoZXIgaHVtYW4gYWx0ZXJlZCBlbnZpcm9ubWVudHMgYXNpZGUgZnJvbSBoaWdobHkgc3BhY2VkIHVucGF2ZWQgZGlydCBhY2Nlc3Mgcm9hZHMgdGhyb3VnaG91dCB0aGUgc3Vycm91bmRpbmcgYXJlYS4gCgo8YnI+CgohW093bEhlYWRdKHBpY3R1cmUyLnBuZyl7d2lkdGg9MzAwcHh9Cgo8YnI+CgoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmJpb2NsaW0gPC0gZ2V0RGF0YShuYW1lID0gIndvcmxkY2xpbSIsIHJlcyA9IDIuNSwgdmFyID0gImJpbyIsIHBhdGggPSAiLi9EYXRhLyIpCgpuYW1lcyhiaW9jbGltKSA8LSBjKCJBbm4gTWVhbiBUZW1wIiwiTWVhbiBEaXVybmFsIFJhbmdlIiwiSXNvdGhlcm1hbGl0eSIsCiAgICAgICAgICAgICAgICAgICAgIlRlbXBlcmF0dXJlIFNlYXNvbmFsaXR5IiwiTWF4IFRlbXAgV2FybWVzdCBNbyIsIk1pbiBUZW1wIENvbGRlc3QgTW8iLAogICAgICAgICAgICAgICAgICAgICJBbm4gVGVtcCBSYW5nZSIsIk1lYW4gVGVtcCBXZXR0ZXN0IFF0ciIsIk1lYW4gVGVtcCBEcmllc3QgUXRyIiwKICAgICAgICAgICAgICAgICAgICAiTWVhbiBUZW1wIFdhcm1lc3QgUXRyIiwiTWVhbiBUZW1wIENvbGRlc3QgUXRyIiwiQW5udWFsIFByZWNpcCIsCiAgICAgICAgICAgICAgICAgICAgIlByZWNpcCBXZXR0ZXN0IE1vIiwiUHJlY2lwIERyaWVzdCBNbyIsIlByZWNpcCBTZWFzb25hbGl0eSIsCiAgICAgICAgICAgICAgICAgICAgIlByZWNpcCBXZXR0ZXN0IFF0ciIsIlByZWNpcCBEcmllc3QgUXRyIiwiUHJlY2lwIFdhcm1lc3QgUXRyIiwKICAgICAgICAgICAgICAgICAgICAiUHJlY2lwIENvbGRlc3QgUXRyIikKCiMgYmlvX2V4dGVudCA8LSBleHRlbnQoeCA9IGMoCiMgICBtaW4oSC5zdXNwX3h5JGxvbmdpdHVkZSksCiMgICBtYXgoSC5zdXNwX3h5JGxvbmdpdHVkZSksCiMgICBtaW4oSC5zdXNwX3h5JGxhdGl0dWRlKSwKIyAgIG1heChILnN1c3BfeHkkbGF0aXR1ZGUpKSkKCmJpb19leHRlbnQgPC0gZXh0ZW50KHggPSBjKAogIG1pbigtMTE4KSwKICBtYXgoLTEwNSksCiAgbWluKDMwKSwKICBtYXgoNDApKSkKCgpiaW9jbGltX2V4dGVudCA8LSBjcm9wKHggPSBiaW9jbGltLCB5ID0gYmlvX2V4dGVudCkKYmlvY2xpbV9tb2RlbCA8LSBiaW9jbGltKHggPSBiaW9jbGltX2V4dGVudCwgcCA9IEguc3VzcF94eSkKcHJlc2VuY2VfbW9kZWwgPC0gZGlzbW86OnByZWRpY3Qob2JqZWN0ID0gYmlvY2xpbV9tb2RlbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBiaW9jbGltX2V4dGVudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCA9IGJpb19leHRlbnQpCgojIEguc3VzcF9pbmZvCmdwbG90KHByZXNlbmNlX21vZGVsKSArIAogIGdlb21fcmFzdGVyKGFlcyhmaWxsPXZhbHVlKSkgKwogIGdlb21fcG9seWdvbihkYXRhID0gdXMsIGFlcyh4PSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgICAgICAgICAgICAgZmlsbCA9IE5BLCBjb2xvcj0iYmxhY2siKSArCiAgZ2VvbV9wb2ludChkYXRhID0gSC5zdXNwX2luZm8sIGFlcyh4ID0gbG9uZ2l0dWRlLCB5ID0gbGF0aXR1ZGUpLCBjb2xvciA9ICJibGFjayIsIAogICAgICAgICAgICAgYWxwaGEgPSAwLjUpICsKICBzY2FsZV9maWxsX2dyYWRpZW50bihjb2xvdXJzPWMoImJyb3duIiwieWVsbG93IiwiZGFya2dyZWVuIiksICJQcm9iYWJpbGl0eSIpICsKICBjb29yZF9maXhlZCh4bGltID0gYygtMTE3LC0xMDYpLCB5bGltID0gYygzMSwzOSkpICsKICB4bGFiKCJMb25naXR1ZGUiKSArIHlsYWIoIkxhdGl0dWRlIikgKyBnZ3RpdGxlKCJQcm9iYWJpbGl0eSBvZiBHaWxhIE1vbnN0ZXIgT2NjdXJyZW5jZSIpICsgCiAgdGhlbWVfYncoKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKCgoKCiMgT3ZlcmFsbCBZZWFybHkgSG9tZSBSYW5nZXMgKE1DUCkKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5TdW1tYXJ5IG9mIGhvbWUgcmFuZ2Ugc2l6ZS48L3NwYW4+CgpgYGB7ciBIb21lIHJhbmdlIHNpemVzIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzIGJ5IHllYXIuLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpHTV90YWJsZSA8LSByZWFkX2NzdigiR01fdGFibGUuY3N2IikKa2FibGUoR01fdGFibGUsZm9ybWF0PSJwYW5kb2MiLCBjYXB0aW9uPSdUYWJsZSAxIHwgUG9vbGVkIG92ZXJhbGwgaG9tZSByYW5nZXMgb2YgR2lsYSBNb25zdGVycyBhdCBPd2wgSGVhZCBCdXR0ZXMgYW5kIFN0b25lIENhbnlvbiBHb2xmIENsdWIuIEJvdGggMTAwJSBhbmQgOTUlIE1DUHMgd2VyZSBjYWxjdWxhdGVkIGJldHdlZW4gYm90aCBwb3B1bGF0aW9ucy4nKQpgYGAKCjk1JSBhbmQgMTAwJSBNQ1AgZXN0aW1hdGVzIHdlcmUgdXNlZCB0byBhc3Nlc3Mgb3ZlcmFsbCBhbmQgc2Vhc29uYWwgdmFyaWF0aW9uIGZvciBjb21wYXJpc29ucyBiZXR3ZWVuIE93bCBIZWFkIGFuZCBTdG9uZSBDYW55b24uIFRvIGV4cGxvcmUgcG90ZW50aWFsIGluZnJlcXVlbnQgZXhwbG9yYXRvcnkgbW92ZW1lbnRzIGFzIGRlc2NyaWJlZCBieSBCdXJ04oCZcyAoMTk0MykgZGVmaW5pdGlvbiBvZiBob21lIHJhbmdlLCBzdWNoIGFzIG1hdGUgc2VhcmNoaW5nIGJ5IG1hbGVzLCB3ZSB1c2VkIDk1JSBNQ1BzLiBUaGlzIGNhbiBnaXZlIGFuIGluZGljYXRpb24gdG8gdGhlIGV4dGVudCBvZiBhIEdpbGEgTW9uc3RlcnMgaG9tZSByYW5nZSB0aGF0IGlzIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gZXhwbG9yYXRvcnkgbW92ZW1lbnRzLiBEdWUgdGhlIG5hdHVyZSBvZiBvdXIgZGF0YXNldCB3ZSB1c2VkIFJlcGVhdGVkIE1lYXN1cmVzIEFuYWx5c2lzIG9mIFZhcmlhbmNlIChSTUFOT1ZBKSBkdWUgdG8gaXRzIHJlZHVjZWQgc2Vuc2l0aXZpdHkgdG8gbWlzc2luZyBkYXRhIGFuZCBhbiB1bmJhbGFuY2VkIGRlc2lnbi4gVGhpcyBtZXRob2Qgd2FzIHBlcmZvcm1lZCBmb3IgYm90aCAxMDAlIGFuZCA5NSUgTUNQcy4gRm9yIHllYXJseSBob21lIHJhbmdlcywgTWl4ZWQgRWZmZWN0cyBSTUFOT1ZBcyB3ZXJlIHBlcmZvcm1lZCB0byBleGFtaW5lIHRoZSBlZmZlY3RzIG9mIHllYXIsIHNleCwgYW5kIHNhbXBsZSBzaXplLiBQb3N0LUhvYyBwYWlyd2lzZSBjb21wYXJpc29ucyB3ZXJlIHBlcmZvcm1lZCB0byBhc3Nlc3Mgd2hlcmUgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgb2NjdXJyZWQuICAKCjxicj4KCgpgYGB7cn0KQWxsLkdpbGFzIDwtIHJlYWRfY3N2KCIuL0dNX0ZpbmFsX0RhdGEuY3N2IikKCnV0bV9wb2ludHMgPC0gY2JpbmQoQWxsLkdpbGFzJEVBU1RJTkcsIEFsbC5HaWxhcyROT1JUSElORykKCnV0bV9sb2NhdGlvbnMgPC0gU3BhdGlhbFBvaW50cyh1dG1fcG9pbnRzLCBwcm9qNHN0cmluZz1DUlMuU0MpCgpwcm9qX2xhdC5sb24gPC0gYXMuZGF0YS5mcmFtZShzcFRyYW5zZm9ybSh1dG1fbG9jYXRpb25zLCBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0IikpKQpjb2xuYW1lcyhwcm9qX2xhdC5sb24pIDwtIGMoIngiLCJ5IikKCiMjIEZPUlRJR1kgU1BBVElBTCBTUEFUSUFMIFBPSU5UUyBGT1IgUExPVFRJTkc6CnByb2pfbGF0LmxvbiA8LSBmb3J0aWZ5KHByb2pfbGF0LmxvbiwgcmVnaW9uID0gIlR5cGUiKQoKbXlNYXAgPC0gZ2V0X3N0YW1lbm1hcChiYm94ID0gYyhsZWZ0ID0gLTExMS4wMDksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tID0gMzIuNDU5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gLTExMC45NjksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gMzIuNDc0KSwKICAgICAgICAgICAgICAgICAgICAgICBtYXB0eXBlID0gInRlcnJhaW4iLCAKICAgICAgICAgICAgICAgICAgICAgICBjcm9wID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgem9vbSA9IDE1KQoKZ2dtYXAobXlNYXApK2dlb21fcG9pbnQoZGF0YT1wcm9qX2xhdC5sb24sIGFlcyh4PXgsIHk9eSksIHNpemU9MC4zKQpgYGAKRmlndXJlIDIgfCBUb3RhbCByZWxvY2F0aW9ucyBvZiAyMiBHaWxhIE1vbnN0ZXJzIHRocm91Z2hvdXQgU3RvbmUgQ2FueW9uIGZvciB0aGUgZW50aXJlIHN0dWR5IHBlcmlvZC4KCjxicj4KCgoKIyMgT3ZlcmFsbCBIb21lIFJhbmdlIENvbXBhcmlzb25zIE1DUC4gCgpgYGB7ciBTdG9uZSBDYW55b24gVnMuIE93bCBIZWFkIEJ1dHRlcywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KeWVhciA8LSByZWFkX2NzdigiR01fQ29uc29saWRhdGVkX0J5WWVhci5jc3YiKQoKIyBxdWljayBwbG90CkdyYXBoMTwtZ2dwbG90KHllYXIsYWVzKHg9TjEwMCx5PUhvbWVfUmFuZ2VfMTAwbWNwLGdyb3VwPUVudmlyb25tZW50KSkrCiAgZ2VvbV9wb2ludChhZXMoc2hhcGUgPSBmYWN0b3IoRW52aXJvbm1lbnQpKSwgc2l6ZSA9IDIpKwogIGdlb21fc21vb3RoKG1ldGhvZD1sbSkrCiAgIyBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcz1jKHN1YnNpZGl6ZWQ9ImN5YW4zIixub25zdWJzaWRpemVkPSJpbmRpYW4gcmVkMSIpKSsKICAjIGxhYnModGl0bGUgPSAiMTAwJSBNQ1AgSG9tZSBSYW5nZXMiKSsKICB4bGFiKCJOdW1iZXIgb2YgUmVsb2NhdGlvbnMiKSsKICB5bGFiKCJBcmVhIChoYSkgdXNpbmcgMTAwJSBNQ1AiKSsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLHNlPUZBTFNFKSsKICBsYWJzKGNhcHRpb24gPSAiRmlndXJlIDMgfCBOb24tU3Vic2lkaXplZCAoT3dsIEhlYWQgQnV0dGVzKSB2cy4gU3Vic2lkaXplZCAoU3RvbmUgQ2FueW9uKSBwb3B1bGF0aW9uIDEwMCUgTUNQcyBhZ2FpbnN0IG51bWJlciBcbiBvZiBmaXhlcyBvZiB0aGUgY29tcGxldGUgZGF0YSBzZXQuIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkKICAjIHRoZW1lX2J3KCkKCkdyYXBoMTwtR3JhcGgxK3RoZW1lKGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemUgPSAxNCkpCgojIGxlZ2VuZCBhdCB0b3AtbGVmdCwgaW5zaWRlIHRoZSBwbG90ClNDT0guaHIuZmlnPC1HcmFwaDEgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpClNDT0guaHIuZmlnCiMgZGlyLmNyZWF0ZSgib3V0cHV0cyIpICMgY3JlYXRlIGEgbmV3IGZvbGRlciB0byBob2xkIHRoZSBvdXRwdXQgZmlsZXMKIyBnZ3NhdmUoIm91dHB1dHMvU0NfT0hCX3Bsb3QucGRmIikKYGBgCgo8YnI+CgpBdCBTdG9uZSBDYW55b24sIGhvbWUgcmFuZ2VzIGFwcGVhcmVkIHJlbGF0aXZlbHkgc3RhYmxlLCB3aXRoIG5vIG1ham9yIHNoaWZ0cyBpbiBhcmVhcyBvZiB1c2UgKEZpZy4gNCkuIE1hbGUgeWVhcmx5IGhvbWUgcmFuZ2VzIHJhbmdlZCBmcm9tIDEuOTEgLSAyNS4xIGhhLCB3aXRoIGEgbWVhbiBvZiAxMS43IMKxIDEuNyBTLkUuIGhhICgxMDAlIE1DUCksIDkuMSDCsSAxLjMgUy5FLiBIYSAoOTUlIE1DUCkuIEZlbWFsZSBob21lIHJhbmdlcyByYW5nZWQgZnJvbSAyLjEg4oCTIDM4LjggaGEgYW5kIGEgbWVhbiBvZiA5LjggwrEgMS4xIFMuRS4gaGEgKDEwMCUgTUNQKSwgNy4xIMKxIDAuNyBTLkUuIGhhICg5NSUgTUNQKS4gTWFsZSBHaWxhIE1vbnN0ZXJzIGF0IE93bCBoZWFkIEJ1dHRlcyBoYWQgaG9tZSByYW5nZXMgdGhhdCByYW5nZWQgZnJvbSAxMC42IOKAkyA4Mi43IGhhIHdpdGggYSBtZWFuIG9mIDQzLjIgwrEgNS43IFMuRS4gaGEgKDEwMCUgTUNQKSwgNDEuOSDCsSA0LjkgUy5FLiBoYSAoOTUlIE1DUCkuIEZlbWFsZSBob21lIHJhbmdlcyByYW5nZWQgZnJvbSA3LjEg4oCTIDQ3LjYgd2l0aCBhIG1lYW4gb2YgMjIuMCDCsSAzLjcgUy5FLiBoYSAoMTAwJSBNQ1ApLCAyMC42IMKxIDIuNSBTLkUuIGhhICg5NSUgTUNQKS4KCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KFJtaXNjKQpNZWFucyA8LSBzdW1tYXJ5U0UoeWVhciwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV8xMDBtY3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIpLG5hLnJtID0gVFJVRSkKCmthYmxlKE1lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdPdmVyYWxsIGNvbWJpbmVkIDEwMCUgTUNQIG1lYW5zIGF2ZXJhZ2VkIGFjcm9zcyBzZXgnKQpgYGAKCgo8YnI+CgoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgbWNwX2FuYWx5c2lzIDwtIGZ1bmN0aW9uKGZpbGVuYW1lLCBwZXJjZW50YWdlKXsKIyAgIGRhdGEgPC0gcmVhZC5jc3YoZmlsZSA9IGZpbGVuYW1lKQojICAgeCA8LSBhcy5kYXRhLmZyYW1lKGRhdGEkRUFTVElORykKIyAgIHkgPC0gYXMuZGF0YS5mcmFtZShkYXRhJE5PUlRISU5HKQojICAgeHkgPC0gYyh4LHkpCiMgICBkYXRhLnByb2ogPC0gU3BhdGlhbFBvaW50c0RhdGFGcmFtZSh4eSxkYXRhLCBwcm9qNHN0cmluZyA9IENSUy5TQykKIyAgIHh5IDwtIFNwYXRpYWxQb2ludHMoZGF0YS5wcm9qQGNvb3JkcykKIyAgIG1jcC5vdXQgPC0gbWNwKHh5LCBwZXJjZW50YWdlLCB1bm91dD0iaGEiKQojICAgYXJlYSA8LSBhcy5kYXRhLmZyYW1lKHJvdW5kKG1jcC5vdXRAZGF0YSRhcmVhLDQpKQojICAgLnJvd05hbWVzREYoYXJlYSwgbWFrZS5uYW1lcz1UUlVFKSA8LSBkYXRhJFlFQVIKIyAgIHdyaXRlLnRhYmxlKGFyZWEsZmlsZT0iTUNQX0hlY3RhcmVzLmNzdiIsCiMgICAgICAgICAgICAgICBhcHBlbmQ9VFJVRSxzZXA9IiwiLCBjb2wubmFtZXM9RkFMU0UsIHJvdy5uYW1lcz1UUlVFKQojICAgbWNwLnBvaW50cyA8LSBjYmluZCgoZGF0YS5mcmFtZSh4eSkpLGRhdGEkWUVBUikKIyAgIGNvbG5hbWVzKG1jcC5wb2ludHMpIDwtIGMoIngiLCJ5IiwgInllYXIiKQojICAgbWNwLnBvbHkgPC0gZm9ydGlmeShtY3Aub3V0LCByZWdpb24gPSAiaWQiKQojICAgdW5pdHMgPC0gZ3JpZC50ZXh0KHBhc3RlKHJvdW5kKG1jcC5vdXRAZGF0YSRhcmVhLDIpLCIgaGEiKSwgeD0wLjksICB5PTAuOTUsCiMgICAgICAgICAgICAgICAgICAgICAgZ3A9Z3Bhcihmb250ZmFjZT00LCBjZXg9MC45KSwgZHJhdyA9IEZBTFNFKQojICAgbWNwLnBsb3QgPC0gZ2dwbG90KCkgKwojICAgICBnZW9tX3BvbHlnb24oZGF0YT1tY3AucG9seSwgYWVzKHg9bWNwLnBvbHkkbG9uZywgeT1tY3AucG9seSRsYXQpLCBhbHBoYT0wLjUpICsKIyAgICAgZ2VvbV9wb2ludChkYXRhPW1jcC5wb2ludHMsIGFlcyh4PXgsIHk9eSkpICsgdGhlbWVfYncoKSArCiMgICAgIGxhYnMoeD0iRWFzdGluZyAobSkiLCB5PSJOb3J0aGluZyAobSkiLCB0aXRsZT1tY3AucG9pbnRzJHllYXIpICsKIyAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIiwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSkpICsKIyAgICAgYW5ub3RhdGlvbl9jdXN0b20odW5pdHMpCiMgICBtY3AucGxvdAojIH0KCmBgYAoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CkNSUy5TQzwtQ1JTKCIrcHJvaj11dG0gK3pvbmU9MTIgK2VsbHBzPVdHUzg0ICt1bml0cz1tICtub19kZWZzIikKCm1jcF9hbmFseXNpcy5QT0xZIDwtIGZ1bmN0aW9uKGZpbGVuYW1lLCBwZXJjZW50YWdlKXsKICBkYXRhIDwtIHJlYWQuY3N2KGZpbGUgPSBmaWxlbmFtZSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiAgZGF0YS5zcCA8LSBkYXRhWywgYygiTElaQVJETlVNQkVSIiwgIkVBU1RJTkciLCAiTk9SVEhJTkciKV0KICBjb29yZGluYXRlcyhkYXRhLnNwKSA8LSBjKCJFQVNUSU5HIiwgIk5PUlRISU5HIikKICBwcm9qNHN0cmluZyhkYXRhLnNwKSA8LSBDUlMuU0MKICBtY3Bfb3V0IDwtIG1jcChkYXRhLnNwLCBwZXJjZW50YWdlLCB1bm91dD0iaGEiKQp9CgpNMjE1X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0yMTVfbWNwLjEyPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1LzIwMTIgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEwNF9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMDQvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTA0X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEwNC8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMTI8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAxMiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC4xMjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny8yMDEyIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMTI8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDEyIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTE5X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTJfbWNwLjA3PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyLzIwMDcgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk02OV9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL002OS8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk02OV9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL002OS8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgojIyBGb3J0aWZ5IG1jcCBwb2x5Z29ucyBmb3IgZ2dwbG90MiAqWUVBUio6CkYxMDRfbWNwLjA4VCA8LSBmb3J0aWZ5KEYxMDRfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpGMTA0X21jcC4wOVQgPC0gZm9ydGlmeShGMTA0X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMDhUIDwtIGZvcnRpZnkoRjExNF9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjA5VCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4xMFQgPC0gZm9ydGlmeShGMTE0X21jcC4xMCwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMTFUIDwtIGZvcnRpZnkoRjExNF9tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjEyVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjEyLCByZWdpb24gPSAiaWQiKQpGMTM3X21jcC4wOVQgPC0gZm9ydGlmeShGMTM3X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuMTBUIDwtIGZvcnRpZnkoRjEzN19tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLjExVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC4wOVQgPC0gZm9ydGlmeShGMTQ3X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuMTBUIDwtIGZvcnRpZnkoRjE0N19tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLjExVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC4xMlQgPC0gZm9ydGlmeShGMTQ3X21jcC4xMiwgcmVnaW9uID0gImlkIikKRjM2X21jcC4wOFQgPC0gZm9ydGlmeShGMzZfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjA5VCA8LSBmb3J0aWZ5KEYzNl9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMTBUIDwtIGZvcnRpZnkoRjM2X21jcC4xMCwgcmVnaW9uID0gImlkIikKRjM2X21jcC4xMVQgPC0gZm9ydGlmeShGMzZfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjEyVCA8LSBmb3J0aWZ5KEYzNl9tY3AuMTIsIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuMDhUIDwtIGZvcnRpZnkoRjY2X21jcC4wOCwgcmVnaW9uID0gImlkIikKRjY2X21jcC4wOVQgPC0gZm9ydGlmeShGNjZfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLjEwVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLjA4VCA8LSBmb3J0aWZ5KE0xMTlfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpNMTE5X21jcC4wOVQgPC0gZm9ydGlmeShNMTE5X21jcC4wOSwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuMTBUIDwtIGZvcnRpZnkoTTExOV9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLjA3VCA8LSBmb3J0aWZ5KE0xMTJfbWNwLjA3LCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC4wOVQgPC0gZm9ydGlmeShNMTEyX21jcC4wOSwgcmVnaW9uID0gImlkIikKTTExMl9tY3AuMTBUIDwtIGZvcnRpZnkoTTExMl9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk02OV9tY3AuMDlUIDwtIGZvcnRpZnkoTTY5X21jcC4wOSwgcmVnaW9uID0gImlkIikKTTY5X21jcC4xMFQgPC0gZm9ydGlmeShNNjlfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpNMjE1X21jcC4xMVQgPC0gZm9ydGlmeShNMjE1X21jcC4xMSwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuMTJUIDwtIGZvcnRpZnkoTTIxNV9tY3AuMTIsIHJlZ2lvbiA9ICJpZCIpCgoKbWNwLnNoaWZ0LlRFU1Q0IDwtIGdncGxvdCgpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTA0X21jcC4wOFQsIGFlcyh4PUYxMDRfbWNwLjA4VCRsb25nLCB5PUYxMDRfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMDRfbWNwLjA5VCwgYWVzKHg9RjEwNF9tY3AuMDlUJGxvbmcsIHk9RjEwNF9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMDhULCBhZXMoeD1GMTE0X21jcC4wOFQkbG9uZywgeT1GMTE0X21jcC4wOFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4wOVQsIGFlcyh4PUYxMTRfbWNwLjA5VCRsb25nLCB5PUYxMTRfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLjEwVCwgYWVzKHg9RjExNF9tY3AuMTBUJGxvbmcsIHk9RjExNF9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMTFULCBhZXMoeD1GMTE0X21jcC4xMVQkbG9uZywgeT1GMTE0X21jcC4xMVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4xMlQsIGFlcyh4PUYxMTRfbWNwLjEyVCRsb25nLCB5PUYxMTRfbWNwLjEyVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLjA5VCwgYWVzKHg9RjEzN19tY3AuMDlUJGxvbmcsIHk9RjEzN19tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuMTBULCBhZXMoeD1GMTM3X21jcC4xMFQkbG9uZywgeT1GMTM3X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC4xMVQsIGFlcyh4PUYxMzdfbWNwLjExVCRsb25nLCB5PUYxMzdfbWNwLjExVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjA5VCwgYWVzKHg9RjE0N19tY3AuMDlUJGxvbmcsIHk9RjE0N19tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjEwVCwgYWVzKHg9RjE0N19tY3AuMTBUJGxvbmcsIHk9RjE0N19tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjExVCwgYWVzKHg9RjE0N19tY3AuMTFUJGxvbmcsIHk9RjE0N19tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjEyVCwgYWVzKHg9RjE0N19tY3AuMTJUJGxvbmcsIHk9RjE0N19tY3AuMTJUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMDhULCBhZXMoeD1GMzZfbWNwLjA4VCRsb25nLCB5PUYzNl9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4wOVQsIGFlcyh4PUYzNl9tY3AuMDlUJGxvbmcsIHk9RjM2X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLjEwVCwgYWVzKHg9RjM2X21jcC4xMFQkbG9uZywgeT1GMzZfbWNwLjEwVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NikgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMTFULCBhZXMoeD1GMzZfbWNwLjExVCRsb25nLCB5PUYzNl9tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4xMlQsIGFlcyh4PUYzNl9tY3AuMTJUJGxvbmcsIHk9RjM2X21jcC4xMlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLjA4VCwgYWVzKHg9RjY2X21jcC4wOFQkbG9uZywgeT1GNjZfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuMDlULCBhZXMoeD1GNjZfbWNwLjA5VCRsb25nLCB5PUY2Nl9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC4xMFQsIGFlcyh4PUY2Nl9tY3AuMTBUJGxvbmcsIHk9RjY2X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTEpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTE5X21jcC4wOFQsIGFlcyh4PU0xMTlfbWNwLjA4VCRsb25nLCB5PU0xMTlfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExOV9tY3AuMDlULCBhZXMoeD1NMTE5X21jcC4wOVQkbG9uZywgeT1NMTE5X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTlfbWNwLjEwVCwgYWVzKHg9TTExOV9tY3AuMTBUJGxvbmcsIHk9TTExOV9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTEyX21jcC4wN1QsIGFlcyh4PU0xMTJfbWNwLjA3VCRsb25nLCB5PU0xMTJfbWNwLjA3VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExMl9tY3AuMDlULCBhZXMoeD1NMTEyX21jcC4wOVQkbG9uZywgeT1NMTEyX21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTJfbWNwLjEwVCwgYWVzKHg9TTExMl9tY3AuMTBUJGxvbmcsIHk9TTExMl9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTMpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU02OV9tY3AuMDlULCBhZXMoeD1NNjlfbWNwLjA5VCRsb25nLCB5PU02OV9tY3AuMDlUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1NNjlfbWNwLjEwVCwgYWVzKHg9TTY5X21jcC4xMFQkbG9uZywgeT1NNjlfbWNwLjEwVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIikgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9TTIxNV9tY3AuMTFULCBhZXMoeD1NMjE1X21jcC4xMVQkbG9uZywgeT1NMjE1X21jcC4xMVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU0yMTVfbWNwLjEyVCwgYWVzKHg9TTIxNV9tY3AuMTJUJGxvbmcsIHk9TTIxNV9tY3AuMTJUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgdGhlbWVfYncoKSArbGFicyh4PSJFYXN0aW5nIChtKSIsIHk9Ik5vcnRoaW5nIChtKSIpICsKICBsYWJzKGNhcHRpb24gPSAiRmlndXJlIDQgIHwgIFllYXJseSBob21lIHJhbmdlIHNoaWZ0cyBvZiBzdWItc2FtcGxlZCBob21lIHJhbmdlcyBvZiA4IGxpemFyZHMsIGJvdGggbWFsZXMgYW5kIGZlbWFsZXMuIEhvbWUgXG4gcmFuZ2Ugc2hpZnRzIGFwcGVhciB0byBiZSByZWxhdGl2bGV5IHN0YWJsZSBvdmVyIHN0dWR5IHllYXJzLiIpKwogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpCiAgIyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkKIyMgd2l0aGluIGVhY2ggZ2VvbV9wb2x5Z29uIGxpbmU/OgojIyBhZXMoY29sb3VyPSJyZWQib3IiTTExMl9tY3AuMDlUIikuLi4rc2NhbGVfY29sb3JfbWFudWFsKG5hbWU9IiIsYnJlYWtzPWMoIiIsIiIsLi4uIiIpKSsKIyMgdmFsdWVzPWMoIiI9IiIsLi4uKQoKbWNwLnNoaWZ0LlRFU1Q0CmBgYAoKPGJyPgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KbGlicmFyeShSbWlzYykKWVJfR1JQX01lYW5zIDwtIHN1bW1hcnlTRSh5ZWFyLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzEwMG1jcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIkVudmlyb25tZW50IiwiU2V4IiksbmEucm0gPSBUUlVFKQoKa2FibGUoWVJfR1JQX01lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgCiAgICAgIGNhcHRpb24gPSAnVGFibGUgMSB8IFJhdyBncm91cCAxMDAlIE1DUCBob21lIHJhbmdlIG1lYW5zIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzLiBHcm91cGVkIGJ5IGVudmlyb25tZW50IGFuZCBzZXguJykKYGBgCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KWVJfR1JQX01lYW5zOTUgPC0gc3VtbWFyeVNFKHllYXIsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfOTVtY3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIkVudmlyb25tZW50IiwiU2V4IiksbmEucm0gPSBUUlVFKQoKa2FibGUoWVJfR1JQX01lYW5zOTUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1RhYmxlIDIgfCBSYXcgZ3JvdXAgOTUlIE1DUCBob21lIHJhbmdlIG1lYW5zIG9mIHJhdyBkYXRhIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzLiBHcm91cGVkIGJ5IGVudmlyb25tZW50IGFuZCBzZXguJykKYGBgCgoKPGJyPgoKCiAgSW4gdGhlIGFuYWx5c2VzIG9mIGJvdGggcG9wdWxhdGlvbnMsIHllYXIgaGFkIG5vIGVmZmVjdCBvbiAxMDAlIE1DUCBob21lIHJhbmdlIHNpemVzIChGID0gMC40MSwgUCA9IDAuNTIpLCB3aGlsZSB0aGVyZSB3YXMgYSBkZXRlY3RlZCBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIGhvbWUgcmFuZ2VzIGJldHdlZW4gdGhlIHR3byBwb3B1bGF0aW9ucyAoRiA9IDguNjksIFAgPSAwLjAwNCksIGFzIHdlbGwgYXMgc2V4IChGID0gMTYuMzMsIFAgPSAwLjAwMDQpLiAKCjxicj4KCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5SZXBlYXRlZCBtZWFzdXJlcyBBTk9WQSBmb3IgWWVhcmx5IEhvbWUgUmFuZ2VzLjwvc3Bhbj4KCmBgYHtyIFJNQU5PVkEgWUVBUkxZIE9WRVJBTEwgMTAwJU1DUCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgR2V0IHAtdmFsdWVzIGZyb20gbWl4ZWQgbW9kZWwgRiB2YWx1ZXM6CmxpYnJhcnkobG1lNCkKbGlicmFyeShyZWFkcikKeWVhciA8LSByZWFkX2NzdigiR01fQ29uc29saWRhdGVkX0J5WWVhci5jc3YiKQoKUk1tb2QueWVhcjwtbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtZZWFyK1NleCtOMTAwK0Vudmlyb25tZW50KlNleCsKICAgICAgICAgICAgICAgICAgICgxfEdpbGEpLGRhdGEgPSB5ZWFyKQpzdW1tYXJ5KFJNbW9kLnllYXIpCmBgYAoKCgpBTk9WQSBUYWJsZTogMTAwJSBNQ1AKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KYW5vdmEoUk1tb2QueWVhcikKYGBgCgo8YnI+CgpXaGVuIHVzaW5nIDk1JSBNQ1BzLCBtYWxlIGhvbWUgcmFuZ2VzIHJlZHVjZWQgYnkgMjUlIGFuZCBmZW1hbGUgcmFuZ2UgYnkgMzElLiBBdCBPd2wgSGVhZCBCdXR0ZXMsIEdpbGEgTW9uc3RlcnMgc2hvd2VkIGEgc2ltaWxhciBiZWhhdmlvciB3aXRoIG1hbGUgaG9tZSByYW5nZXMgcmVkdWNlZCBieSAyMCUgYW5kIGZlbWFsZSByYW5nZXMgcmVkdWNlZCBieSAyNiUgdXNpbmcgOTUlIE1DUHMuIFRoZSBhZmZlY3Qgb2Ygc2FtcGxlIHNpemUgd2FzIGFsc28gcmVtb3ZlZCBpbiB0aGUgOTUlIE1DUCBhbmFseXNpcy4gU2luY2UgdGhlcmUgd2FzIG5vIGluZGljYXRpb24gZm9yIG1ham9yIGV4cGxvcml0b3J5IG1vdmVtZW50cyBleGhpYml0ZWQgYW1vbmcgbWFsZXMsIGFuZCBzaW1pbGFyIHBhdHRlcm5zIG9ic2VydmVkIGFtb25nIHRoZSBPd2wgSGVhZCBwb3B1bGF0aW9uLCAxMDAlIE1DUHMgd2VyZSB1c2VkIGZvciBmdXJ0aGVyIGFuYWx5c2VzLiAKCjxicj4KCmBgYHtyIFJNQU5PVkEgWUVBUkxZIE9WRVJBTEwgOTUlIE1DUCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNbW9kLnllYXI5NTwtbG1lcihIb21lX1JhbmdlXzk1bWNwfkVudmlyb25tZW50K1llYXIrU2V4K04xMDArRW52aXJvbm1lbnQqU2V4KwogICAgICAgICAgICAgICAgICAgKDF8R2lsYSksZGF0YSA9IHllYXIpCnN1bW1hcnkoUk1tb2QueWVhcjk1KQpgYGAKCgoKQU5PVkEgVGFibGU6IDk1JSBNQ1AKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNbW9kLnllYXI5NSkKYGBgCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApgYGB7ciBSYXcgYW5kIEVNTWVhbnMgb2YgWWVhcmx5IE92ZXJhbGwgMTAwJU1DUCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNbW9kLnllYXIxMDA8LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCtFbnZpcm9ubWVudCpTZXgrKDF8R2lsYSksZGF0YSA9IHllYXIpCgpSTS5tYXJnaW5hbCA8LSBsc21lYW5zKFJNbW9kLnllYXIxMDAsIAogICAgICAgICAgICAgICAgICAgIH4gRW52aXJvbm1lbnQpCiMgUk0ubWFyZ2luYWwKCiMjIENBVEFHT1JJWkUgTFNNIEdSQVBIIEJZIFNFWCBCRVRXRUVOIEVOVklST05NRU5UOgpyZWZSTV9zZXggPC0gbHNtZWFucyhSTW1vZC55ZWFyMTAwLCBzcGVjcyA9IGMoIkVudmlyb25tZW50IiwiU2V4IikpCgojIHJlZlJNX3NleApyZWZfZGZSTV9zZXggPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KHJlZlJNX3NleCkpCnBkX1JNIDwtIHBvc2l0aW9uX2RvZGdlKDAuMSkKCnlyLm1lYW4uYWRqPC1nZ3Bsb3QocmVmX2RmUk1fc2V4LCBhZXMoeD1TZXgseT1sc21lYW4sZ3JvdXA9RW52aXJvbm1lbnQpKSsKICBnZW9tX3BvaW50KGFlcyhzaGFwZSA9IGZhY3RvcihFbnZpcm9ubWVudCkpLCBzaXplID0gMixwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguMSksIAogICAgICAgICAgICBzaG93LmxlZ2VuZCA9IEZBTFNFKSsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWxzbWVhbi1TRSwgeW1heD1sc21lYW4rU0UpLCB3aWR0aD0uMSxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsKICAjIGdndGl0bGUoIkFkanVzdGVkIEhvbWUgUmFuZ2VzIGJ5IFNleCBhbmQgUG9wdWxhdGlvbiAoMTAwJSBNQ1ApIikrCiAgeGxhYigiU2V4IikrCiAgeWxhYigiIikKICAjIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgNSAgfCAgQWRqdXN0ZWQgaG9tZSByYW5nZXMgdXNpbmcgMTAwJSBNQ1BzIGJldHdlZW4gc2V4ZXMgb2Ygbm9uLXN1YnNpZGl6ZWQgYW5kIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbnMuIFxuIEFkanVzdGVkIGZvciBlbnZpcm9ubWVudCwgeWVhciwgc2V4LCBhbmQgc2FtcGxlIHNpemUuIE1hbGUgaG9tZSByYW5nZXMgcmVtYWluZWQgc21hbGxlciB0aGFuIHRob3NlIG9mIGZlbWFsZXMgYXQgXG4gT3dsIEhlYWQgQnV0dGVzLiIpKwogICMgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkKICAjIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKCiMgeXIubWVhbi5hZGo8LXlyLm1lYW4uYWRqICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKIyB5ci5tZWFuLmFkagojIHJtKExTTS5ZZWFySFIpCgpwZF9STSA8LSBwb3NpdGlvbl9kb2RnZSgwLjEpCgpSYXcuWWVhckhSPC1nZ3Bsb3QoWVJfR1JQX01lYW5zLCBhZXMoeD1TZXgseT1Ib21lX1JhbmdlXzEwMG1jcCxncm91cD1FbnZpcm9ubWVudCkpKwogIGdlb21fcG9pbnQoYWVzKHNoYXBlID0gZmFjdG9yKEVudmlyb25tZW50KSksIHNpemUgPSAyLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSkrCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSksCiAgICAgICAgICAgICAgICB3aWR0aD0uMSxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsKICAjIGdndGl0bGUoIk92ZXJhbGwgSG9tZSBSYW5nZXMgYnkgU2V4IGFuZCBQb3B1bGF0aW9uICgxMDAlIE1DUCkiKSsKICB4bGFiKCJTZXgiKSsKICB5bGFiKCIxMDAlIE1DUCBBcmVhIChoYSkiKQogICMgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgY29sb3I9ImJsYWNrIiwgc2l6ZT0xNCwgZmFjZT0iYm9sZCIpKQogICMgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSAzIHwgUmF3IG92ZXJhbGwgbWVhbiBob21lIHJhbmdlcyBiZXR3ZWVuIGVudmlyb25tZW50IGFuZCBzZXggdXNpbmcgMTAwJSBNQ1BzLiBOb3RlLCB0aGF0IGJlZm9yZSBhZGp1c3RlZCBcbiBob21lIHJhbmdlcywgbWFsZXMgZXhoaWJpdCBzbWFsbGVyIG92ZXJhbGwgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uLCB0aGFuIG1hbGVzIG9mIE93bCBIZWFkIEJ1dHRlcy4iKSsKICAjIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpCgp5ci5tZWFuLnJhdzwtUmF3LlllYXJIUiArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKIyB5ci5tZWFuLnJhdwoKbGlicmFyeShncmlkRXh0cmEpCmxpYnJhcnkoZ3JpZCkKCmdyaWQuYXJyYW5nZSh5ci5tZWFuLnJhdywgeXIubWVhbi5hZGosIG5yb3cgPSAxLCAgCiAgICAgICAgICAgICBib3R0b20gPSB0ZXh0R3JvYigiRmlndXJlIDUgfCBhLiBSYXcgZ3JvdXAgbWVhbnMgb2Ygb3ZlcmFsbCB5ZWFybHkgaG9tZSByYW5nZXMgYmV0d2VlbiBtYWxlcyBhbmQgZmVtYWxlcy4gTm90ZSB0aGF0IHRoZSBtYWxlIFxuIGhvbWUgcmFuZ2Ugb2YgdGhlIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbiBpcyBzbWFsbGVyIHRoYW4gdGhhdCBvZiB0aGUgZmVtYWxlIGhvbWUgcmFuZ2UgaW4gdGhlIG5vbi1zdWJzaWRpemVkIFxuIHBvcHVsYXRpb24uIGIuIEdyb3VwIG1lYW5zIG9mIGhvbWUgcmFuZ2VzIGFmdGVyIGJlaW5nIGFkanVzdGVkIGZvciBlbnZpcm9ubWVudCwgeWVhciwgc2V4LCBhbmQgc2FtcGxlIHNpemUuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwID0gZ3Bhcihmb250ZmFjZSA9IDEsZm9udHNpemUgPSAxMCksaGp1c3QgPSAwLCB4ID0gMCkpCmBgYAoKCjxicj4KCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQprYWJsZShyZWZfZGZSTV9zZXgsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1RhYmxlIDMgfCBEaXJlY3Rpb25hbCBtZWFucyBvZiBob21lIHJhbmdlICgxMDAlIE1DUCkgYWZ0ZXIgYmVpbmcgYWRqdXN0ZWQgZm9yIHllYXIsIHNleCBhbmQgc2FtcGxlIHNpemUuJykKYGBgCgo8YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiMjIyBQb3N0LUhvYyBjb21wYXJpc29ucyBiZXR3ZWVuIHNleGVzIGFuZCBlbnZpcm9ubWVudCAxMDAlIE1DUDoKClBvc3QtSG9jIGFuYWx5c2VzIGJldHdlZW4gc2V4ZXMgaW5kaWNhdGVkIHRoYXQgdGhlcmUgd2FzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBtYWxlIGhvbWUgcmFuZ2VzIGJldHdlZW4gdGhlIHR3byBlbnZpcm9ubWVudHMgKGRmID0gNjguMywgUCA9IDAuMDAxKS4gVGhlcmUgd2FzIGEgc2xpZ2h0IGRpZmZlcmVuY2Ugb2YgZmVtYWxlIGhvbWUgcmFuZ2VzIGJldHdlZW4gdGhlIHR3byBlbnZpcm9ubWVudHMsIGhvd2V2ZXIgaXQgd2FzIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IChkZiA9IDY4LjcsIFAgPSAwLjA3KS4gQXQgc3RvbmUgY2FueW9uIHRoZXJlIHdhcyBubyBtYWpvciBkaWZmZXJlbmNlIGJldHdlZW4gbWFsZSBhbmQgZmVtYWxlIGhvbWUgcmFuZ2VzIChkZiA9IDMxLjgsIFAgPSAwLjE2KSB3aXRoIG1hbGUgaG9tZSByYW5nZSBiZWluZyBvbmx5IDMlIGxhcmdlciB0aGFuIGZlbWFsZXMuIE1hbGVzIGF0IE93bCBIZWFkIEJ1dHRlcyBoYWQgYSA2NSUgbGFyZ2VyIGhvbWUgcmFuZ2UgdGhhbiBkaWQgZmVtYWxlcywgYW5kIHdhcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IChkZiA9IDMxLjYsIFAgPSAwLjAwMDMpLiBJbnRlcmVzdGluZ2x5LCBtYWxlcyBhdCBTdG9uZSBDYW55b24gaGFkIHNtYWxsZXIgaG9tZSByYW5nZXMgdGhhbiBkaWQgdGhlIGZlbWFsZXMgYXQgT3dsIEhlYWQgQnV0dGVzIChUYWJsZSB4KS4gCgo8YnI+CgpgYGB7ciBDb21wcyBmb3IgU2V4LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KUk1tb2QueWVhci5FbTwtbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtZZWFyK1NleCtOMTAwK0Vudmlyb25tZW50KlNleCsKICAgICAgICAgICAgICAgICAgICAgICgxfEdpbGEpLGRhdGEgPSB5ZWFyKQoKIyBTZXguZW1tLm9hIDwtIGVtbWVhbnMoUk1tb2QueWVhci5FbSwgYygiRW52aXJvbm1lbnQiLCJTZXgiKSkKIyBwYWlycyhTZXguZW1tLm9hKQoKZW1tX3MudDIgPC0gZW1tZWFucyhSTW1vZC55ZWFyLkVtLCBwYWlyd2lzZSB+IFNleCB8IEVudmlyb25tZW50KQplbW1fcy50MgpgYGAKCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIG9mIFNleCBXaXRoaW4gRWFjaCBFbnZpcm9ubWVudDoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3MudDIsIGNvbXBhcmlzb25zID0gVFJVRSwgeGxhYiA9ICJMZWFzdCBTcXVhcmUgTWVhbiAoaGEpIiwgeWxhYiA9ICJFbnZpcm9ubWVudCIpCmBgYApGaWd1cmUgNiB8IFBhaXJ3aXNlIGNvbXBhcmlzb25zIG9mIGhvbWUgcmFuZ2UgYmV0d2VlbiBzZXhlcyB3aXRoaW4gZWFjaCBlbnZpcm9ubWVudC4gSWYgcmVkIGFycm93cyBvdmVybGFwIHRob3NlIG9mIG90aGVycywgdGhlbiAgdGhlcmUgaXMgbm8gc2lnbmlmaWNhbnQgc3RhdGlzdGljYWwgZGlmZmVyZW5jZS4gCgo8YnI+CgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KZW1tX3MudDMgPC0gZW1tZWFucyhSTW1vZC55ZWFyLkVtLCBwYWlyd2lzZSB+IEVudmlyb25tZW50IHwgU2V4KQplbW1fcy50MwpgYGAKCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIG9mIFNleCBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnM6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpwbG90KGVtbV9zLnQzLCBjb21wYXJpc29ucyA9IFRSVUUsIHhsYWIgPSAiTGVhc3QgU3F1YXJlIE1lYW4gKGhhKSIsIHlsYWIgPSAiRW52aXJvbm1lbnQiKQpgYGAKRmlndXJlIDcgfCBQYWlyd2lzZSBjb21wYXJpc29ucyBvZiBzZXggYmV0d2VlbiBlbnZpcm9ubWVudHMuIElmIHJlZCBhcnJvd3Mgb3ZlcmxhcCB0aG9zZSBvZiBvdGhlcnMsIHRoZW4gdGhlcmUgaXMgbm8gc2lnbmlmaWNhbnQgc3RhdGlzdGljYWwgZGlmZmVyZW5jZS4gCgoKPGJyPgogCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KCm1jcF9hbmFseXNpcy5QT0xZIDwtIGZ1bmN0aW9uKGZpbGVuYW1lLCBwZXJjZW50YWdlKXsKICBkYXRhIDwtIHJlYWQuY3N2KGZpbGUgPSBmaWxlbmFtZSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiAgZGF0YS5zcCA8LSBkYXRhWywgYygiTElaQVJETlVNQkVSIiwgIkVBU1RJTkciLCAiTk9SVEhJTkciKV0KICBjb29yZGluYXRlcyhkYXRhLnNwKSA8LSBjKCJFQVNUSU5HIiwgIk5PUlRISU5HIikKICBwcm9qNHN0cmluZyhkYXRhLnNwKSA8LSBDUlMuU0MKICBtY3Bfb3V0IDwtIG1jcChkYXRhLnNwLCBwZXJjZW50YWdlLCB1bm91dD0iaGEiKQp9CgpNNjdfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NNjcvTTY3IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk02OV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL002OS9NNjkgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTI1NV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00yNTUvTTI1NSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNMjE1X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vTTIxNS9NMjE1IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0xNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00xNC9NMTQgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00xMTkvTTExOSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNMTEyX01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vTTExMi9NMTEyIC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCgpGNjZfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GNjYvRjY2IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYzNl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YzNi9GMzYgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YyNTIvRjI1MiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMjE0X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjIxNC9GMjE0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYyMDBfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMjAwL0YyMDAgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxNDcvRjE0NyAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTQ2X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjE0Ni9GMTQ2IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTM3L0YxMzcgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzNV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxMzUvRjEzNSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTE0X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjExNC9GMTE0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxMDRfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTA0L0YxMDQgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKCk1hbGUuTUNQIDwtIHJiaW5kKE02N19NQ1AsTTY5X01DUCxNMjU1X01DUCxNMjE1X01DUCxNMTRfTUNQLE0xMTlfTUNQLE0xMTJfTUNQKQpGZW1hbGUuTUNQIDwtIHJiaW5kKEY2Nl9NQ1AsRjM2X01DUCxGMjUyX01DUCxGMjE0X01DUCxGMjAwX01DUCxGMTQ3X01DUCxGMTQ2X01DUCxGMTM3X01DUCwKICAgICAgICAgICAgICAgICAgICBGMTM1X01DUCxGMTE0X01DUCxGMTA0X01DUCkKCm1hcHZpZXdPcHRpb25zKGJhc2VtYXBzID0gYygiT3BlblN0cmVldE1hcCIsIkVzcmkuV29ybGRJbWFnZXJ5IiwiT3BlblRvcG9NYXAiKSwKICAgICAgICAgICAgICAgbmEuY29sb3IgPSAibWFnZW50YSIsCiAgICAgICAgICAgICAgIGxheWVycy5jb250cm9sLnBvcyA9ICJ0b3BsZWZ0IikKCm1hcHZpZXcoTWFsZS5NQ1AsIGxlZ2VuZD1GLCB6Y29sPSJpZCIsIGNvbC5yZWdpb25zID0gYygiYmx1ZSIpLCBhbHBoYS5yZWdpb25zPTAuMykgKyAKICBtYXB2aWV3KEZlbWFsZS5NQ1AsIGxlZ2VuZD1GLCB6Y29sID0gImlkIiwgY29sLnJlZ2lvbnMgPSBjKCJyZWQiKSwgYWxwaGEucmVnaW9ucz0wLjMpCmBgYApGaWd1cmUgOCB8IEludGVyYWN0aXZlIG1hcDogSG9tZSBSYW5nZSBvdmVybGFwIGJ5IHNleCBvZiAxMDAlIE1DUHMgYXQgU3RvbmUgQ2FueW9uLiBSZWQgcG9seWdvbnMgcmVwcmVzZW50IGZlbWFsZSBsaXphcmRzLCBhbmQgYmx1ZSByZXByZXNlbnRzIG1hbGUgbGl6YXJkcy4gCgoKPGJyPgoKCiMjIE92ZXJhbGwgSG9tZSBSYW5nZSBDb21wYXJpc29ucyBLREU6CgoKSG9tZSByYW5nZSBlc3RpbWF0aW9uIG9uIHRoZSBTdG9uZSBDYW55b24gR2lsYSBNb25zdGVycyB1c2luZyA5NSUgS0RFcyB3aXRoIGhyZWYgYmFuZHdpZHRoIHByb2R1Y2VkIG1hbGUgaG9tZSByYW5nZXMgcmFuZ2luZyBmcm9tIDE0LjUg4oCTIDU1LjMgaGEgd2l0aCBhIG1lYW4gb2YgMzUuMCDCsSAzLjEgUy5FLiBoYS4gRmVtYWxlIGhvbWUgcmFuZ2VzIHJhbmdlZCBmcm9tIDEwLjEg4oCTIDQ3LjggaGEgd2l0aCBhIG1lYW4gb2YgMjMuMCDCsSAxLjggUy5FLiBLREUgZXN0aW1hdGVzIGZvciBtYWxlIGFuZCBmZW1hbGUgaG9tZSByYW5nZXMgd2VyZSA5NiUgYW5kIDgwJSBsYXJnZXIgcmVzcGVjdGl2ZWx5IHRoYW4gTUNQIGVzdGltYXRlcy4gUmVwZWF0ZWQgTWVhc3VyZXMgYW5hbHlzaXMgb2YgS0RFcyBzdWdnZXN0ZWQgdGhhdCB0aGVyZSB3YXMgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGJldHdlZW4gbWFsZSBhbmQgZmVtYWxlIGhvbWUgcmFuZ2VzIGF0IFN0b25lIENhbnlvbiAoRiA9IDguODgsIFAgPSAwLjAwOCkuIFRoZXJlIHdhcyBub3QgYW4gYWZmZWN0IG9mIHllYXIgb24gaG9tZSByYW5nZXMgKEYgPSAwLjU5LCBQID0gMC40NCkuIAoKPGJyPgoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnllYXIua2RlPC1yZWFkX2NzdigneWVhcmx5IGtkZSB0YWJsZS5jc3YnKQprYWJsZSh5ZWFyLmtkZSwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnWWVhcmx5IEtERSBIb21lIFJhbmdlcycpCmBgYAoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0Kc3ViIDwtIHN1YnNldCh5ZWFyLCBFbnZpcm9ubWVudCA9PSAic3Vic2lkaXplZCIpCgpZUl9HUlBfTWVhbnMuS0RFIDwtIHN1bW1hcnlTRShzdWIsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfOTVrZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIlNleCIpLG5hLnJtID0gVFJVRSkKCmthYmxlKFlSX0dSUF9NZWFucy5LREUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1RhYmxlIDQgfCBSYXcgR3JvdXAgOTUlIEtERSBob21lIHJhbmdlIG1lYW5zIG1hbGUgYW5kIGZlbWFsZSBob21lIHJhbmdlcyBhdCBTdG9uZSBDYW55b24uJykKYGBgCiAKPGJyPgogCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5SZXBlYXRlZCBtZWFzdXJlcyBBTk9WQSBmb3IgS0RFIEhvbWUgUmFuZ2VzLjwvc3Bhbj4KCgpgYGB7ciBSZXBlYXRlZCBNZWFzdXJlcyBBTk9WQSBLREUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIEdldCBwLXZhbHVlcyBmcm9tIG1peGVkIG1vZGVsIEYgdmFsdWVzOgoKUk0uS0RFbW9kLnllYXI8LWxtZXIoSG9tZV9SYW5nZV85NWtkZX5ZZWFyK1NleCtOKygxfEdpbGEpLGRhdGEgPSBzdWIpCgpzdW1tYXJ5KFJNLktERW1vZC55ZWFyKQpgYGAKIApBTk9WQSBUYWJsZSBmb3IgOTUlIEtERSAoc3Vic2lkaXplZCkKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNLktERW1vZC55ZWFyKQpgYGAKCjxicj4KCk1hbGUgNTAlIEtERSBob21lIHJhbmdlcyByYW5nZXMgYXZlcmFnZWQgOS4wIMKxIDAuOCBTLkUuIGhhLiwgZmVtYWxlIGhvbWUgcmFuZ2VzIGF2ZXJhZ2VkIDUuNiDCsSAwLjUgUy5FLiBSZXBlYXRlZCBNZWFzdXJlcyBhbmFseXNpcyBvZiA1MCUgS0RFcyBzdWdnZXN0ZWQgdGhhdCB0aGVyZSB3YXMgc3RpbGwgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGJldHdlZW4gbWFsZSBhbmQgZmVtYWxlIGhvbWUgcmFuZ2VzIGF0IFN0b25lIENhbnlvbiAoRiA9IDYuMzYsIFAgPSAwLjAxKS4gVGhlcmUgd2FzIG5vdCBhbiBhZmZlY3Qgb2YgeWVhciBvbiBob21lIHJhbmdlcyAoRiA9IDAuMDYsIFAgPSAwLjc5KS4gCgo8YnI+CgpgYGB7ciBSZXBlYXRlZCBNZWFzdXJlcyBBTk9WQTUwJSBLREUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIEdldCBwLXZhbHVlcyBmcm9tIG1peGVkIG1vZGVsIEYgdmFsdWVzOgoKUk0uS0RFLjUwLm1vZC55ZWFyPC1sbWVyKEhvbWVfUmFuZ2VfNTBrZGV+WWVhcitTZXgrTisoMXxHaWxhKSxkYXRhID0gc3ViKQoKc3VtbWFyeShSTS5LREUuNTAubW9kLnllYXIpCmBgYAoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CllSX0dSUF9NZWFucy5LREUgPC0gc3VtbWFyeVNFKHN1YiwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV81MGtkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiU2V4IiksbmEucm0gPSBUUlVFKQoKa2FibGUoWVJfR1JQX01lYW5zLktERSwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnVGFibGUgNSB8IFJhdyBHcm91cCA1MCUgS0RFIGhvbWUgcmFuZ2UgbWVhbnMgbWFsZSBhbmQgZmVtYWxlIGhvbWUgcmFuZ2VzIGF0IFN0b25lIENhbnlvbi4nKQpgYGAKCgpBTk9WQSBUYWJsZSBmb3IgNTAlIEtERSAoc3Vic2lkaXplZCkKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNLktERS41MC5tb2QueWVhcikKYGBgCiAKIAoKIAogCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeShncmlkKQoKUmF3LktERS5IUjwtZ2dwbG90KFlSX0dSUF9NZWFucy5LREUsIGFlcyh4PVNleCx5PUhvbWVfUmFuZ2VfOTVrZGUpKSsKICBnZW9tX3BvaW50KHNpemUgPSAyLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguMSkpKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49SG9tZV9SYW5nZV85NWtkZS1zZSwgeW1heD1Ib21lX1JhbmdlXzk1a2RlK3NlKSwKICAgICAgICAgICAgICAgIHdpZHRoPS4xLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpKwogICMgZ2d0aXRsZSgiT3ZlcmFsbCBIb21lIFJhbmdlcyBieSBTZXggYW5kIFBvcHVsYXRpb24gKDEwMCUgTUNQKSIpKwogIHhsYWIoIlNleCIpKwogIHlsYWIoIjk1JSBLREUgQXJlYSAoaGEpIikrCiAgICMgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSA4ICB8ICBSYXcgOTUlIEtERSBob21lIHJhbmdlcyBiZXR3ZWVuIG1hbGUgYW5kIGZlbWFsZSBob21lIHJhbmdlcyBhdCBTdG9uZSBDYW55b24uIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkKICAjIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKClJhdy5LREUuSFI8LVJhdy5LREUuSFIgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCiMgUmF3LktERS5IUgoKUk0uS0RFbW9kLnllYXI8LWxtZXIoSG9tZV9SYW5nZV85NWtkZX5ZZWFyK1NleCtOKygxfEdpbGEpLGRhdGEgPSBzdWIpCgpLREUubWFyZ2luYWwgPC0gbHNtZWFucyhSTS5LREVtb2QueWVhciwgCiAgICAgICAgICAgICAgICAgICAgfiBTZXgpCiMgUk0ubWFyZ2luYWwKCiMjIENBVEFHT1JJWkUgTFNNIEdSQVBIIEJZIFNFWCBCRVRXRUVOIEVOVklST05NRU5UOgpyZWZSTV9LREUgPC0gbHNtZWFucyhSTS5LREVtb2QueWVhciwgc3BlY3MgPSBjKCJTZXgiKSkKCiMgcmVmUk1fc2V4CnJlZl9kZlJNX0tERSA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fS0RFKSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4xKQoKTFNNLktERS5IUjwtZ2dwbG90KHJlZl9kZlJNX0tERSwgYWVzKHg9U2V4LHk9bHNtZWFuKSkrCiAgZ2VvbV9wb2ludChzaXplID0gMixwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguMSkpKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49bHNtZWFuLVNFLCB5bWF4PWxzbWVhbitTRSksIHdpZHRoPS4xLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKCkpKwogICMgZ2d0aXRsZSgiQWRqdXN0ZWQgSG9tZSBSYW5nZXMgYnkgU2V4IGFuZCBQb3B1bGF0aW9uICgxMDAlIE1DUCkiKSsKICB4bGFiKCJTZXgiKSsKICB5bGFiKCIiKQogICMgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSA4ICB8ICBBZGp1c3RlZCA5NSUgS0RFIGhvbWUgcmFuZ2VzIGJldHdlZW4gbWFsZSBhbmQgZmVtYWwgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uLiBBZGp1c3RlZCBvbiB5ZWFyLCBcbiBzZXgsIGFuZCBzYW1wbGUgc2l6ZS4iKSsKICAjIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpCiAgIyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBjb2xvcj0iYmxhY2siLCBzaXplPTE0LCBmYWNlPSJib2xkIikpCgojIExTTS5LREUuSFI8LUxTTS5LREUuSFIgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKDAuMDUsIDAuOTUpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQojIExTTS5LREUuSFIKCmdyaWQuYXJyYW5nZShSYXcuS0RFLkhSLCBMU00uS0RFLkhSLCBucm93ID0gMSwgIAogICAgICAgICAgICAgYm90dG9tID0gdGV4dEdyb2IoIkZpZ3VyZSA5IHwgYS4gUmF3IGdyb3VwIG1lYW5zIG9mIG92ZXJhbGwgeWVhcmx5IDk1JSBLREVzIGJldHdlZW4gbWFsZXMgYW5kIGZlbWFsZXMgYXQgU3RvbmUgQ2FueW9uLiBcbiBiLiBBZGp1c3RlZCA5NSUgS0RFcyBhZnRlciBiZWluZyBhZGp1c3RlZCBmb3IgIHllYXIsIHNleCwgYW5kIHNhbXBsZSBzaXplLiIsIGdwID0gZ3Bhcihmb250ZmFjZSA9IDEsZm9udHNpemUgPSAxMCksaGp1c3QgPSAwLCB4ID0gMCkpCmBgYAoKIAo8YnI+CiAKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KCmtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24gPC0gZnVuY3Rpb24oZmlsZW5hbWUsIHBlcmNlbnRhZ2UpewogIGRhdGEgPC0gcmVhZC5jc3YoZmlsZSA9IGZpbGVuYW1lLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKICBkYXRhLnNwIDwtIGRhdGFbLCBjKCJMSVpBUkROVU1CRVIiLCAiRUFTVElORyIsICJOT1JUSElORyIpXQogIGNvb3JkaW5hdGVzKGRhdGEuc3ApIDwtIGMoIkVBU1RJTkciLCAiTk9SVEhJTkciKQogIHByb2o0c3RyaW5nKGRhdGEuc3ApIDwtIENSUy5TQwogIGtkZTwta2VybmVsVUQoZGF0YS5zcCwgaD0iaHJlZiIsIGtlcm49ImJpdm5vcm0iLCBncmlkPTEwMDApCiAgdmVyIDwtIGdldHZlcnRpY2VzaHIoa2RlLCBwZXJjZW50YWdlKQogIHZlckBwcm9qNHN0cmluZzwtQ1JTLlNDCiAgdmVyCn0KCk02N19LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTY3L002NyAuY3N2JywgcGVyY2VudGFnZT0gOTUpCk02OV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTY5L002OSAuY3N2JywgcGVyY2VudGFnZT0gOTUpCk0yNTVfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL00yNTUvTTI1NSAuY3N2JywgcGVyY2VudGFnZT0gOTUpCk0yMTVfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL00yMTUvTTIxNSAuY3N2JywgcGVyY2VudGFnZT0gOTUpCk0xNF9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTE0L00xNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCk0xMTlfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL00xMTkvTTExOSAuY3N2JywgcGVyY2VudGFnZT0gOTUpCk0xMTJfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL00xMTIvTTExMiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCgpGNjZfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0Y2Ni9GNjYgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQpGMzZfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YzNi9GMzYgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQpGMjUyX0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9GMjUyL0YyNTIgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQpGMjE0X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9GMjE0L0YyMTQgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQpGMjAwX0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9GMjAwL0YyMDAgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQpGMTQ3X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9GMTQ3L0YxNDcgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQpGMTQ2X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9GMTQ2L0YxNDYgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQpGMTM3X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9GMTM3L0YxMzcgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQpGMTM1X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9GMTM1L0YxMzUgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQpGMTE0X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9GMTE0L0YxMTQgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQpGMTA0X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9GMTA0L0YxMDQgLmNzdicsIHBlcmNlbnRhZ2U9IDk1KQoKTWFsZS5LREUgPC0gcmJpbmQoTTY3X0tERSxNNjlfS0RFLE0yNTVfS0RFLE0yMTVfS0RFLE0xNF9LREUsTTExOV9LREUsTTExMl9LREUpCkZlbWFsZS5LREUgPC0gcmJpbmQoRjY2X0tERSxGMzZfS0RFLEYyNTJfS0RFLEYyMTRfS0RFLEYyMDBfS0RFLEYxNDdfS0RFLEYxNDZfS0RFLEYxMzdfS0RFLAogICAgICAgICAgICAgICAgICAgIEYxMzVfS0RFLEYxMTRfS0RFLEYxMDRfS0RFKQoKbWFwdmlld09wdGlvbnMoYmFzZW1hcHMgPSBjKCJPcGVuU3RyZWV0TWFwIiwiRXNyaS5Xb3JsZEltYWdlcnkiLCJPcGVuVG9wb01hcCIpLAogICAgICAgICAgICAgICBuYS5jb2xvciA9ICJtYWdlbnRhIiwKICAgICAgICAgICAgICAgbGF5ZXJzLmNvbnRyb2wucG9zID0gInRvcGxlZnQiKQoKbWFwdmlldyhNYWxlLktERSwgbGVnZW5kPUYsIHpjb2w9ImlkIiwgY29sLnJlZ2lvbnMgPSBjKCJibHVlIiksIGFscGhhLnJlZ2lvbnM9MC4zKSArIAogIG1hcHZpZXcoRmVtYWxlLktERSwgbGVnZW5kPUYsIHpjb2wgPSAiaWQiLCBjb2wucmVnaW9ucyA9IGMoInJlZCIpLCBhbHBoYS5yZWdpb25zPTAuMykKYGBgCkZpZ3VyZSAxMCB8IEludGVyYWN0aXZlIG1hcDogSG9tZSBSYW5nZSBvdmVybGFwIGJ5IHNleCBvZiA5NSUgS0RFcyBhdCBTdG9uZSBDYW55b24uIFJlZCBwb2x5Z29ucyByZXByZXNlbnQgZmVtYWxlIGxpemFyZHMsIGFuZCBibHVlIHJlcHJlc2VudHMgbWFsZSBsaXphcmRzLiAKCjxicj4KCgpgYGB7ciBldmFsPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQprYWJsZShyZWZfZGZSTV9LREUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1RhYmxlICB8IERpcmVjdGlvbmFsIG1lYW5zIG9mIEtERSBob21lIHJhbmdlcyBhZnRlciBiZWluZyBhZGp1c3RlZCBmb3IgeWVhciwgc2V4IGFuZCBzYW1wbGUgc2l6ZS4nKQpgYGAKIAoKIyBTZWFzb25hbCBIb21lIFJhbmdlCgpTZWFzb25zIHdlcmUgY2F0ZWdvcml6ZWQgYmFzZWQgb24gY3JpdGVyaWEgdGhhdCB3ZXJlIGJvdGggZWNvbG9naWNhbGx5IGFwcGxpY2FibGUgdG8gR2lsYSBNb25zdGVycyBhbmQgY29tcGFyYWJsZSB0byBvdGhlciBzdHVkaWVzLiBGaXZlIGRpc3RpbmN0IGVjb2xvZ2ljYWxseSByZWxldmFudCDigJxzZWFzb25z4oCdIHdlcmUgdXNlZCB0byBjaGFyYWN0ZXJpemUgR2lsYSBNb25zdGVyIGFjdGl2aXR5IHBhdHRlcm5zOiB3aW50ZXIsIGVtZXJnZW5jZSwgZHJ5LCBtb25zb29uLCBhbmQgcG9zdC1tb25zb29uLiBUaGUgd2ludGVyIHNlYXNvbiB3YXMgY2hhcmFjdGVyaXplZCBieSBhbiBpbmNvbnNwaWN1b3VzIGludGVydmFsIG9mIGluYWN0aXZpdHkgYXQgYSBzaW5nbGUgbG9jYXRpb24uIFRoaXMgbG9jYXRpb24gd2FzIGFzc3VtZWQgdG8gYmUgYW4gb3ZlcndpbnRlcmluZyByZWZ1Z2Ugd2hpY2ggYXJlIHR5cGljYWxseSBidXJyb3dzIHVuZGVyIHJvY2tzIHdpdGhpbiByb2NreSBidXR0ZXMgaW4gcHJveGltaXR5IG9mIHJlYWNoIGluIGFuIGFuaW1hbOKAmXMgcmFuZ2Ugb2YgYWN0aXZpdHkuIEVtZXJnZW5jZSBpcyBtYXJrZWQgYnkgYW4gaW5jcmVhc2Ugb2YgYWN0aXZpdHkgd2hlbiB0aGUgbGl6YXJkcyBlbWVyZ2UgZnJvbSB0aGVpciB3aW50ZXIgcmVmdWdlcy4gRHVyaW5nIHRoaXMgdGltZSBvZiBpbmNyZWFzZWQgYWN0aXZpdHksIG1vdmVtZW50cyBhcmUgb2Z0ZW4gb3ZlciBzaG9ydCBkaXN0YW5jZXMgYW5kIGFyZSByZWxhdGl2ZWx5IGluZnJlcXVlbnQuIEJhc2VkIG9uIHRoZSBhY3Rpdml0eSBwYXR0ZXJucyBvZiBhbmltYWxzIHdpdGhpbiBidXR0ZXMgYXQgT3dsIEhlYWQsIHRoZSBlbmQgb2YgdGhlIGVtZXJnZW5jZSBzZWFzb24gd2FzIG1hcmtlZCB3aGVuIGFuaW1hbHMgbWlncmF0ZWQgdG8gdGhlIGRlc2VydCBmbGF0cy4gVGhpcyBtb3ZlbWVudCBpcyBvZnRlbiBwcmVzdW1lZCB0byBiZSBhIHJlc3BvbnNlIGR1ZSB0byBlbnZpcm9ubWVudGFsIGN1ZXMuIFN0b25lIENhbnlvbiBkb2VzIG5vdCBwb3NzZXNzIGJ1dHRlcywgYW5kIGR1ZSB0byB0aGUgcmVsYXRpdmUgaGFiaXRhdCBob21vZ2VuZWl0eSBvZiByb2NreSBvdXRjcm9wcyB0aHJvdWdob3V0IHRoZSBnb2xmIGNvdXJzZSwgYW5pbWFsIOKAnG1pZ3JhdGlvbuKAnSBvciBtb3ZlbWVudHMgaW4gcmVzcG9uc2UgdG8gZW52aXJvbm1lbnRhbCBjdWVzIGFyZSBhIGJpdCBtb3JlIGluY29uc3BpY3VvdXMuIFRoZSBlbmQgb2YgZW1lcmdlbmNlIGF0IFN0b25lIENhbnlvbiB3YXMgYmFzZWQgb24gYSBwcm9ub3VuY2VkIGluY3JlYXNlIGluIGFuaW1hbCBtb3ZlbWVudHMgb3ZlciBncmVhdGVyIGRpc3RhbmNlcyBhbmQgZnJlcXVlbmN5LiBPdmVyIHRoZSBlbnRpcmUgc3R1ZHkgcGVyaW9kIGJldHdlZW4gYm90aCBlbnZpcm9ubWVudHMsIHRoZSBlbWVyZ2VuY2Ugc2Vhc29uIHJhbmdlZCBmcm9tIE1hcmNoIDEzdGggdGhyb3VnaCBBcHJpbCAxNnRoLiBUaGUgZHJ5IHNlYXNvbiB3YXMgZGVmaW5lZCBzdGFydGluZyBhdCB0aGUgZW5kIG9mIGVtZXJnZW5jZSB0aHJvdWdoIHRoZSBvbnNldCBvZiB0aGUgbW9uc29vbiBzZWFzb24uIFRoZSBkcnkgc2Vhc29uIGludGVydmFsIGZvciBib3RoIGVudmlyb25tZW50cyBhY3Jvc3MgYm90aCBzdHVkeSBwZXJpb2RzIHdhcyBBcHJpbCAybmQgdGhyb3VnaCBKdWx5IDE4dGguIFRoZSBtb25zb29uIHNlYXNvbiBpcyBvZmZpY2lhbGx5IGRlZmluZWQgYnkgdGhlIE5hdGlvbmFsIFdlYXRoZXIgU2VydmljZSBzdGFydGluZyBKdW5lIDE1dGggYW5kIGVuZGluZyBTZXB0ZW1iZXIgMzB0aC4gSG93ZXZlciwgdGhpcyBzZWFzb25hbCB0aW1lIGludGVydmFsIGlzIGVjb2xvZ2ljYWxseSBpcnJldmVyZW50IHRvIEdpbGEgTW9uc3RlcnMuIEdpbGEgTW9uc3RlciBhY3Rpdml0eSBpcyB0cmlnZ2VyZWQgYnkgZW52aXJvbm1lbnRhbCBjdWVzLCBhbmQgc2luY2UgdGhlIG1vbnNvb24gcmFpbnMgdmFyeSBhY3Jvc3MgeWVhcnMsIHRoZSBjYXRlZ29yaXphdGlvbiBvZiB0aGUgbW9uc29vbiBzZWFzb24gc2hvdWxkIGJlIG1vZGlmaWVkIHRvIHJlZmxlY3QgdGhlIGVjb2xvZ2ljYWwgc3RhcnQgZGF0ZSB0byB3aGljaCBHaWxhIE1vbnN0ZXJzIHdpbGwgYmUgc2Vuc2l0aXZlLiBUaGUgbW9uc29vbiBzZWFzb24gd2FzIGRldGVybWluZWQgYnkgdXNpbmcgTk9BQSBhZGp1c3RlZCBtb25zb29uIGRhdGVzLCB3aGljaCBzdGFydHMgb24gdGhlIGZpcnN0IGRheSB3aGVuIHRoZSBhdmVyYWdlIG9mIGRldyBwb2ludCB0ZW1wZXJhdHVyZXMgd2FzIGdyZWF0ZXIgdGhhbiA1NSBkZWdyZWVzIEZhaHJlbmhlaXQgYWNyb3NzIHRocmVlIGNvbnNlY3V0aXZlIGRheXMgYW5kIGVuZGluZyBvbiBTZXB0ZW1iZXIgMzB0aC4gVGhlIG1vbnNvb24gaW50ZXJ2YWwgZm9yIGJvdGggZW52aXJvbm1lbnRzIHRocm91Z2hvdXQgdGhlIHN0dWR5IHBlcmlvZCByYW5nZWQgZnJvbSBKdW5lIDE3dGggdGhyb3VnaCBTZXB0ZW1iZXIgMzB0aC4gVGhlIHBvc3QtbW9uc29vbiBzZWFzb24gYWZmZWN0aXZlbHkgbWFya3MgdGhlIHRyYW5zaXRpb24gZnJvbSB0aGUgbW9uc29vbiB0byB0aGUgd2ludGVyIHNlYXNvbnMsIGR1cmluZyB3aGljaCBHaWxhIE1vbnN0ZXIgYWN0aXZpdHkgaXMgbGFyZ2VseSByZWR1Y2VkIHRvIHNtYWxsZXIgc2NhbGUgbW92ZW1lbnRzIGFuZCB0ZW5kIHRvIGJlIHJlZHVjZWQgdG8gc21hbGxlciByYW5nZXMgd2l0aGluIHByb3hpbWl0eSBvZiBwcmV2aW91cyBoaWJlcm5hY3VsYS4gUG9zdC1tb25zb29uIHNlYXNvbiBleHRlbmRzIGZyb20gdGhlIGVuZCBvZiB0aGUgbW9uc29vbiAoU2VwdGVtYmVyIDMwdGgpIHRvIHRoZSB3aW50ZXIgbW9udGhzIHdoZW4gR2lsYSBNb25zdGVyIGFjdGl2aXR5IGVzc2VudGlhbGx5IGNlYXNlcyBhdCBhIHNpbmdsZSBsb2NhdGlvbi4gRm9yIGJvdGggZW52aXJvbm1lbnRzIHRocm91Z2hvdXQgZWFjaCBzdHVkeSBwZXJpb2QsIHRoZSBwb3N0LW1vbnNvb24gcmFuZ2VkIGZyb20gT2N0b2JlciAxc3QgdGhyb3VnaCBEZWNlbWJlciAxNHRoLgoKU2NhbGluZyBob21lIHJhbmdlIGFuYWx5c2VzIGJ5IHNlYXNvbmFsIGVzdGltYXRlcyByZWR1Y2VzIHRoZSBudW1iZXIgb2YgbG9jYXRpb25zIGZvciBlYWNoIGxpemFyZC4gMTAwJSBNQ1BzIHdlcmUgdXNlZCBmb3Igc2Vhc29uYWwgaG9tZSByYW5nZSBhbmFseXNlcyB0byBhdm9pZCBhbnkgZnVydGhlciByZWR1Y3Rpb24gb2YgbG9jYXRpb25zIGZvciBlYWNoIGVzdGltYXRpb24uIEZvciBzZWFzb25hbCB2YXJpYXRpb24gaW4gaG9tZSByYW5nZSBzaXplcywgYSBNaXhlZCBFZmZlY3RzIFJNQU5PVkEgd2FzIHBlcmZvcm1lZCB0byBleGFtaW5lIHRoZSBlZmZlY3RzIG9mIHllYXIuIFBvc3QtSG9jIHBhaXJ3aXNlIGNvbXBhcmlzb25zIHVzaW5nIFR1a2V5IGFkanVzdGVkIHAtdmFsdWVzIHdlcmUgcGVyZm9ybWVkIGV4YW1pbmUgd2hlcmUgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgdG9vayBwbGFjZS4gCgo8YnI+CgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIyBDcmVhdGUgTUNQIHBvbHlnb25zIGJ5IFNFQVNPTjoKTTIxNV9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0yMTVfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCk0xMTJfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyL01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpNMTE5X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjExNF9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMTM3X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYxNDdfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3L0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjI1Ml9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YyNTIvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYyNTJfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjI1Mi9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMjUyL01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YyNTIvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMzZfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGNjZfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgojIyBGb3J0aWZ5IG1jcCBwb2x5Z29ucyBmb3IgZ2dwbG90MiAqU0VBU09OKjoKTTIxNV9tY3AuRU1UIDwtIGZvcnRpZnkoTTIxNV9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCk0yMTVfbWNwLkRSWVQgPC0gZm9ydGlmeShNMjE1X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCk0yMTVfbWNwLk1PTlQgPC0gZm9ydGlmeShNMjE1X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCgpNMTEyX21jcC5EUllUIDwtIGZvcnRpZnkoTTExMl9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC5NT05UIDwtIGZvcnRpZnkoTTExMl9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC5QTVQgPC0gZm9ydGlmeShNMTEyX21jcC5QTSwgcmVnaW9uID0gImlkIikKCk0xMTlfbWNwLkRSWVQgPC0gZm9ydGlmeShNMTE5X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLk1PTlQgPC0gZm9ydGlmeShNMTE5X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLlBNVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjExNF9tY3AuRU1UIDwtIGZvcnRpZnkoRjExNF9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLkRSWVQgPC0gZm9ydGlmeShGMTE0X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLk1PTlQgPC0gZm9ydGlmeShGMTE0X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLlBNVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjEzN19tY3AuRU1UIDwtIGZvcnRpZnkoRjEzN19tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLkRSWVQgPC0gZm9ydGlmeShGMTM3X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLk1PTlQgPC0gZm9ydGlmeShGMTM3X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLlBNVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjE0N19tY3AuRU1UIDwtIGZvcnRpZnkoRjE0N19tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLkRSWVQgPC0gZm9ydGlmeShGMTQ3X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLk1PTlQgPC0gZm9ydGlmeShGMTQ3X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLlBNVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjI1Ml9tY3AuRU1UIDwtIGZvcnRpZnkoRjI1Ml9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYyNTJfbWNwLkRSWVQgPC0gZm9ydGlmeShGMjUyX21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYyNTJfbWNwLk1PTlQgPC0gZm9ydGlmeShGMjUyX21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYyNTJfbWNwLlBNVCA8LSBmb3J0aWZ5KEYyNTJfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjM2X21jcC5FTVQgPC0gZm9ydGlmeShGMzZfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLkRSWVQgPC0gZm9ydGlmeShGMzZfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjM2X21jcC5NT05UIDwtIGZvcnRpZnkoRjM2X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuUE1UIDwtIGZvcnRpZnkoRjM2X21jcC5QTSwgcmVnaW9uID0gImlkIikKCkY2Nl9tY3AuRU1UIDwtIGZvcnRpZnkoRjY2X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjY2X21jcC5EUllUIDwtIGZvcnRpZnkoRjY2X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuTU9OVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLlBNVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgptY3Auc2hpZnQuVEVTVDUgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLkVNVCwgYWVzKHg9RjExNF9tY3AuRU1UJGxvbmcsIHk9RjExNF9tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC5EUllULCBhZXMoeD1GMTE0X21jcC5EUllUJGxvbmcsIHk9RjExNF9tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC5NT05ULCBhZXMoeD1GMTE0X21jcC5NT05UJGxvbmcsIHk9RjExNF9tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLlBNVCwgYWVzKHg9RjExNF9tY3AuUE1UJGxvbmcsIHk9RjExNF9tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuRU1ULCBhZXMoeD1GMTM3X21jcC5FTVQkbG9uZywgeT1GMTM3X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLkRSWVQsIGFlcyh4PUYxMzdfbWNwLkRSWVQkbG9uZywgeT1GMTM3X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLk1PTlQsIGFlcyh4PUYxMzdfbWNwLk1PTlQkbG9uZywgeT1GMTM3X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuUE1ULCBhZXMoeD1GMTM3X21jcC5QTVQkbG9uZywgeT1GMTM3X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5FTVQsIGFlcyh4PUYxNDdfbWNwLkVNVCRsb25nLCB5PUYxNDdfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuRFJZVCwgYWVzKHg9RjE0N19tY3AuRFJZVCRsb25nLCB5PUYxNDdfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuTU9OVCwgYWVzKHg9RjE0N19tY3AuTU9OVCRsb25nLCB5PUYxNDdfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5QTVQsIGFlcyh4PUYxNDdfbWNwLlBNVCRsb25nLCB5PUYxNDdfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuRU1ULCBhZXMoeD1GMjUyX21jcC5FTVQkbG9uZywgeT1GMjUyX21jcC5FTVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MikgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuRFJZVCwgYWVzKHg9RjI1Ml9tY3AuRFJZVCRsb25nLCB5PUYyNTJfbWNwLkRSWVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuTU9OVCwgYWVzKHg9RjI1Ml9tY3AuTU9OVCRsb25nLCB5PUYyNTJfbWNwLk1PTlQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NCkgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuUE1ULCBhZXMoeD1GMjUyX21jcC5QTVQkbG9uZywgeT1GMjUyX21jcC5QTVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuRU1ULCBhZXMoeD1GMzZfbWNwLkVNVCRsb25nLCB5PUYzNl9tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLkRSWVQsIGFlcyh4PUYzNl9tY3AuRFJZVCRsb25nLCB5PUYzNl9tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLk1PTlQsIGFlcyh4PUYzNl9tY3AuTU9OVCRsb25nLCB5PUYzNl9tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuUE1ULCBhZXMoeD1GMzZfbWNwLlBNVCRsb25nLCB5PUYzNl9tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5FTVQsIGFlcyh4PUY2Nl9tY3AuRU1UJGxvbmcsIHk9RjY2X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuRFJZVCwgYWVzKHg9RjY2X21jcC5EUllUJGxvbmcsIHk9RjY2X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuTU9OVCwgYWVzKHg9RjY2X21jcC5NT05UJGxvbmcsIHk9RjY2X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5QTVQsIGFlcyh4PUY2Nl9tY3AuUE1UJGxvbmcsIHk9RjY2X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICB0aGVtZV9idygpICsKICBsYWJzKHg9IkVhc3RpbmcgKG0pIiwgeT0iTm9ydGhpbmcgKG0pIikgKwogIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgMTEgfCAgU2Vhc29uYWwgaG9tZSByYW5nZSBzaGlmdHMgb2YgZml2ZSBsaXphcmRzLiBFbWVyZ2VuY2UgYW5kIHBvc3QtbW9uc29vbiByYW5nZXMgc3RheSByZWFsYXRpdmVseSB3aXRoaW4gXG4gZWFjaCBvdGhlci4gQWxsIHNlYXNvbmFsIHBvbHlnb25zIHN0YXkgcmVsYXRpdmVseSBzdGFibGUgd2l0aG91dCBhbnkgbWFqb3Igc2hpZnRzIGF3YXkgZnJvbSBvdGhlciBzZWFzb25hbCByYW5nZXMuIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIiwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSkpCgptY3Auc2hpZnQuVEVTVDUKYGBgCgoKPGJyPgoKClNlYXNvbmFsIGhvbWUgcmFuZ2VzIGF0IFN0b25lIENhbnlvbiB2YXJpZWQgaW4gc2l6ZSBiZXR3ZWVuIHNlYXNvbnMgYnV0IGRpZCBub3Qgc2VlbSBzaGlmdCAoRmlnLiAxMSksIHdpdGggc2Vhc29uYWwgaG9tZSByYW5nZXMgb3ZlcmxhcHBpbmcgZWFjaCBvdGhlciwgb25seSBleHBhbmRpbmcgb3IgY29sbGFwc2luZyBiZXR3ZWVuIHNlYXNvbnMuIEhvbWUgcmFuZ2UgcGF0dGVybnMgYXQgU3RvbmUgQ2FueW9uIGRpZCBub3QgZGlzcGxheSB0aGUgc2FtZSBzZWFzb25hbCB2YXJpYXRpb24gaW4gaG9tZSByYW5nZSBzaXplcyB0aGF0IHdhcyBvYnNlcnZlZCBhdCBPd2wgSGVhZCBCdXR0ZXMuIEF0IFN0b25lIENhbnlvbiwgR2lsYSBNb25zdGVycyBoYWQgcmVsYXRpdmVseSBzbWFsbGVyIGhvbWUgcmFuZ2VzIHRocm91Z2hvdXQgdGhlIHllYXIsIHdoZXJlIHRoZSBoaWdoZXN0IGluZmxhdGlvbiBvZiByYW5nZSBzaXplIHdhcyBvYnNlcnZlZCBkdXJpbmcgdGhlIGRyeSBzZWFzb24gZnJvbSBhbiBpbmNyZWFzZSBpbiBtYWxlIGhvbWUgcmFuZ2VzLCAxOC4zIMKxIDUuNCBTLkUuIGhhIHRvIHRoYXQgb2YgZmVtYWxlIGhvbWUgcmFuZ2Ugc2l6ZXMgYXQgMTAuMiDCsSAyLjQgUy5FLiBoYS4gRmVtYWxlcyBhdCBTdG9uZSBDYW55b24gZGlzcGxheWVkIHNpbWlsYXIgaG9tZSByYW5nZXMgZHVyaW5nIHRoZSBtb25zb29uIHNlYXNvbiwgMTAuNiDCsSAyLjUgUy5FLiBoYS4gSG9tZSByYW5nZSBzaXplcyBhdCBPd2wgSGVhZCBCdXR0ZXMgaGFkIGEgbXVjaCBsYXJnZXIgYW1vdW50IG9mIHZhcmlhdGlvbiBhY3Jvc3Mgc2Vhc29ucyB0aGFuIGRpZCB0aG9zZSBhdCBTdG9uZSBDYW55b24uIFRoZXJlIHdlcmUgc3RpbGwgc2xpZ2h0bHkgbGFyZ2VyIHJhbmdlcyBvYnNlcnZlZCBkdXJpbmcgdGhlIGRyeSBzZWFzb24sIHByaW1hcmlseSBkdWUgdG8gaW5jcmVhc2VkIGhvbWUgcmFuZ2Ugc2l6ZXMgZXhoaWJpdGVkIGJ5IG1hbGVzIDI5LjQgwrEgNC43IFMuRS4gaGEgdmVyc3VzIGZlbWFsZXMgYXQgMTUuNiDCsSAzLjggUy5FLiBoYS4gRHVyaW5nIHRoZSBtb25zb29uIHNlYXNvbiwgdGhlcmUgd2FzIHN0aWxsIHlldCBhIGxhcmdlIGluZmx1eCBvZiBob21lIHJhbmdlcyBzaXplcyB3aGVyZSBmZW1hbGUgaG9tZSByYW5nZXMgaW5jcmVhc2VkIHRvIDIyLjkgwrEgNC4wIFMuRS4gaGEuICBGb3IgYm90aCBwb3B1bGF0aW9ucywgaG9tZSByYW5nZXMgZHVyaW5nIHRoZSBlbWVyZ2VuY2UgYW5kIHBvc3QtbW9uc29vbiBzZWFzb25zIHdlcmUgc21hbGwsIG1hcmtpbmcgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIG9mIG92ZXJ3aW50ZXJpbmcgcGVyaW9kcywgd2hlcmUgbWluaW1hbCBtb3ZlbWVudCBpcyBvYnNlcnZlZCBpbiBib3RoIGdyb3Vwcy4gCgpBbmFseXNpcyBpbmRpY2F0ZWQgdGhhdCB0aGVyZSB3YXMgYW4gZWZmZWN0IG9mIHNlYXNvbiAoZGYgPSAzLCBGID0gMTUuNDEsIFAgPSA8MC4wMDEpIGFzIHdlbGwgYXMgYW4gaW50ZXJhY3Rpb24gb2YgZW52aXJvbm1lbnQgYW5kIHNlYXNvbiAoZGYgPSAzLCBGID0gNi44NCwgUCA9IDwwLjAwMSksIGluZGljYXRpbmcgdGhhdCBjaGFuZ2VzIGluIHNlYXNvbmFsIGhvbWUgcmFuZ2VzIHNpemVzIHZhcmllZCBiZXR3ZWVuIGVhY2ggZW52aXJvbm1lbnQuIAogIAoKPGJyPgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpzZWFzb25hbDwtcmVhZC5jc3YoIlNDX1NlYXNvbmFsX0RhdGEuY3N2IikKCmxpYnJhcnkoUm1pc2MpCgpTRUFTX0dSUF9NZWFucyA8LSBzdW1tYXJ5U0Uoc2Vhc29uYWwsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfMTAwbWNwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIsIlNlYXNvbiIpLCBuYS5ybSA9IFRSVUUpCgojIFNFQVNfR1JQX01lYW5zCmthYmxlKFNFQVNfR1JQX01lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdUYWJsZSA2IHwgR3JvdXAgbWVhbnMgb2Ygc2Vhc29uYWwgaG9tZSByYW5nZXMgYmV0d2VlbiBTdG9uZSBDYW55b24gKHN1YnNpZGl6ZWQpIGFuZCBPd2wgSGVhZCBCdXR0ZXMgKG5vbi1zdWJzaWRpemVkKS4gVGhlc2UgbWVhbnMgYXJlIGF2ZXJhZ2VkIGFjcm9zcyBzZXguJykKYGBgCgoKCgoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkobG1lclRlc3QpCiMgc2Vhc29uYWw8LXJlYWQuY3N2KCJTQ19TZWFzb25hbF9EYXRhLmNzdiIpCgpSTS5tb2QuU2Vhc29uIDwtIGxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrU2Vhc29uK1NleCtOK0Vudmlyb25tZW50KlNlYXNvbisoMXxHaWxhKSwgCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPXNlYXNvbmFsKQpzdW1tYXJ5KFJNLm1vZC5TZWFzb24pCgojIGFub3ZhKFJNLm1vZC5TZWFzb24pCgojICMgbWFyZ2luYWwuc2Vhc29uIDwtIGxzbWVhbnMoUk0ubW9kLlNlYXNvbiwgCiMgIyAgICAgICAgICAgICAgICAgICAgfiBFbnZpcm9ubWVudCkKIyAjIG1hcmdpbmFsLnNlYXNvbgpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphbm92YShSTS5tb2QuU2Vhc29uKQpgYGAKCgoKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9ClNFQVNfR1JQX1RFU1QgPC0gc3VtbWFyeVNFKHNlYXNvbmFsLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzEwMG1jcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIsIlNlYXNvbiIsIlNleCIpLCBuYS5ybSA9IFRSVUUpCgojIFNFQVNfR1JQX01lYW5zCmthYmxlKFNFQVNfR1JQX1RFU1QsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1RhYmxlIDcgfCBTZWFzb25hbCBob21lIHJhbmdlIG1lYW5zIGJldHdlZW4gU3RvbmUgQ2FueW9uIChzdWJzaWRpemVkKSBhbmQgT3dsIEhlYWQgQnV0dGVzIChub24tc3Vic2lkaXplZCkgcG9wdWF0aW9ucyBmb3IgbWFsZXMgYW5kIGZlbWFsZXMuIFRoZXNlIGFyZSByYXcgbWVhbnMgYmVmb3JlIGJlaW5nIGFkanVzdGVkIGZvciBlbnZpcm9ubWVudCwgc2Vhc29uLCBzZXgsIGFuZCBzYW1wbGUgc2l6ZS4nKQpgYGAKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CgpwZCA8LSBwb3NpdGlvbl9kb2RnZSgwLjMpICMgbW92ZSB0aGVtIC4wNSB0byB0aGUgbGVmdCBhbmQgcmlnaHQgKCdkb2RnZXMnKQoKIyMgVEVTVCAzCnJhdy5zZWFzb25hbDwtZ2dwbG90KFNFQVNfR1JQX1RFU1QsYWVzKHg9RW52aXJvbm1lbnQsIHk9SG9tZV9SYW5nZV8xMDBtY3AsIHNoYXBlPVNleCkpICsgCiAgZ2VvbV9wb2ludChhZXMoc2hhcGU9U2V4KSwgc2l6ZSA9IDIsIHBvc2l0aW9uPXBkKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSksIHBvc2l0aW9uID0gcGQsCiAgICAgICAgICAgICAgICB3aWR0aD0wLjMsIHNpemU9MC41LCBsdHk9MSkgKyAKICAjIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygnYmxhY2snLCdyZWQnKSkgKwogIGZhY2V0X2dyaWQoflNlYXNvbikgKwogICMgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoOCwxOSkpKwogIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgMTIgfCAgUmF3IHNlYXNvbmFsIG1lYW5zIG9mIHNleGVzIGJldHdlZW4gZWFjaCBlbnZpcm9ubWVudC4gSG9tZSByYW5nZXMgb2YgdGhlIHN1YnNpZGV6ZWQgcG9wdWxhdGlvbiByZW1haW4gXG4gcmVsYXRpdmVseSBzbWFsbCB0aHJvdWdob3V0IHRoZSBzZWFzb25zLCB3aXRoIHRoZSBleGNlcHRpb24gZHVyaW5nIHRoZSBkcnkgc2Vhc29uIHdoZXJlIHdlIG9ic2VydmUgaW5jcmVhc2VkIG1hbGUgXG4gaG9tZSByYW5nZXMuIFRoZSBub24tc3Vic2lkaXplZCBwb3B1bGF0aW9uIGV4aGliaXRzIGEgbGFyZ2UgYW1vdW50IG9mIHZhcmlhdGlvbiBhY3Jvc3Mgc2Vhc29ucy4iKSsKICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLGxpbmVoZWlnaHQgPSAwLjkpKSsKICAjIHNjYWxlX3hfZGlzY3JldGUobGltaXRzPWMoJ0VtZXJnZW5jZScsJ0RyeScsJ01vbnNvb24nLCdQb3N0X01vbnNvb24nKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9IGMoLjg3LC44NSksIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQobGluZWhlaWdodD0xLjUsIGZhY2U9ImJvbGQiLCBzaXplPXJlbCgxLjUpLCBoanVzdCA9IDAuNSksCiAgICAgICAgYXhpcy50ZXh0LnggID0gZWxlbWVudF90ZXh0KHZqdXN0PTAuNSwgc2l6ZT04KSwKICAgICAgICBheGlzLnRleHQueSAgPSBlbGVtZW50X3RleHQodmp1c3Q9MC41LCBzaXplPTgpLAogICAgICAgIGF4aXMudGl0bGUueSAgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksCiAgICAgICAgYXhpcy50aXRsZS54ICA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xMikpICsKICB4bGFiKCJFbnZpcm9ubWVudCIpICsgeWxhYigiQXJlYSAoaGEpIHVzaW5nIDEwMCUgTUNQIikKcmF3LnNlYXNvbmFsCmBgYAoKCgoKCkFkanVzdGVkIFNlYXNvbmFsIE1lYW5zCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgUmF3IHNlYXNvbmFsIG1lYW5zCiMgcGQgPC0gcG9zaXRpb25fZG9kZ2UoMC4zKSAjIG1vdmUgdGhlbSAuMDUgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0ICgnZG9kZ2VzJykKIyAKIyMgVEVTVCAzCiMgcmF3LnNlYXNvbmFsPC1nZ3Bsb3QoU0VBU19HUlBfVEVTVCxhZXMoeD1FbnZpcm9ubWVudCwgeT1Ib21lX1JhbmdlXzEwMG1jcCwgc2hhcGU9U2V4KSkgKwojICAgZ2VvbV9wb2ludChhZXMoc2hhcGU9U2V4KSwgc2l6ZSA9IDIsIHBvc2l0aW9uPXBkKSArCiMgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUhvbWVfUmFuZ2VfMTAwbWNwLXNlLCB5bWF4PUhvbWVfUmFuZ2VfMTAwbWNwK3NlKSwgcG9zaXRpb24gPSBwZCwKIyAgICAgICAgICAgICAgICAgd2lkdGg9MC4zLCBzaXplPTAuNSwgbHR5PTEpICsKIyAgICMgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKCdibGFjaycsJ3JlZCcpKSArCiMgICBmYWNldF9ncmlkKH5TZWFzb24pICsKIyAgICMgIyBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYyg4LDE5KSkrCiMgICAjIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgIHwgIFJhdyBzZWFzb25hbCBtZWFucyBvZiBzZXhlcyBiZXR3ZWVuIGVhY2ggZW52aXJvbm1lbnQuIEhvbWUgcmFuZ2VzIG9mIHRoZSBzdWJzaWRlemVkIHBvcHVsYXRpb24gcmVtYWluIFxuIHJlbGF0aXZlbHkgc21hbGwgdGhyb3VnaG91dCB0aGUgc2Vhc29ucywgd2l0aCB0aGUgZXhjZXB0aW9uIGR1cmluZyB0aGUgZHJ5IHNlYXNvbiB3aGVyZSB3ZSBvYnNlcnZlIGluY3JlYXNlZCBtYWxlIFxuIGhvbWUgcmFuZ2VzLiBUaGUgbm9uLXN1YnNpZGl6ZWQgcG9wdWxhdGlvbiBleGhpYml0cyBhIGxhcmdlIGFtb3VudCBvZiB2YXJpYXRpb24gYWNyb3NzIHNlYXNvbnMuIikrCiMgICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLGxpbmVoZWlnaHQgPSAwLjkpKSsKIyAgICMgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHM9YygnRW1lcmdlbmNlJywnRHJ5JywnTW9uc29vbicsJ1Bvc3RfTW9uc29vbicpKSArCiMgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBjKC44NywuODUpLCBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSwKIyAgICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQobGluZWhlaWdodD0xLjUsIGZhY2U9ImJvbGQiLCBzaXplPXJlbCgxLjUpLCBoanVzdCA9IDAuNSksCiMgICAgICAgICBheGlzLnRleHQueCAgPSBlbGVtZW50X3RleHQodmp1c3Q9MC41LCBzaXplPTgpLAojICAgICAgICAgYXhpcy50ZXh0LnkgID0gZWxlbWVudF90ZXh0KHZqdXN0PTAuNSwgc2l6ZT04KSwKIyAgICAgICAgIGF4aXMudGl0bGUueSAgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksCiMgICAgICAgICBheGlzLnRpdGxlLnggID0gZWxlbWVudF90ZXh0KHNpemU9MTApLAojICAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwKIyAgICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xMikpICsKIyAgIHhsYWIoIiIpICsgeWxhYigiIikKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyBBanVzdGVkIHNlYXNvbmFsIG1lYW5zClJNLm1vZC5TZWFzb24gPC0gbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtTZWFzb24rU2V4K04rRW52aXJvbm1lbnQqU2Vhc29uKygxfEdpbGEpLAogICAgICAgICAgICAgICAgICAgICAgZGF0YT1zZWFzb25hbCkKCiMgUk0ubWFyZ2luYWwgPC0gbHNtZWFucyhSTS5tb2QuU2Vhc29uLCAKIyAgICAgICAgICAgICAgICAgICAgIH4gRW52aXJvbm1lbnQpCiMgUk0ubWFyZ2luYWwKCiMjIENBVEFHT1JJWkUgTFNNIEdSQVBIIEJZIFNFWCBCRVRXRUVOIEVOVklST05NRU5UOgpyZWZSTV9zZWFzb24gPC0gbHNtZWFucyhSTS5tb2QuU2Vhc29uLCBzcGVjcyA9IGMoIkVudmlyb25tZW50IiwiU2Vhc29uIiwiU2V4IikpCgojIHJlZlJNX3NleApyZWZfZGZSTV9zZWFzb24gPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KHJlZlJNX3NlYXNvbikpCnBkX1JNIDwtIHBvc2l0aW9uX2RvZGdlKDAuMikKCmFkai5zZWFzb25hbDwtZ2dwbG90KHJlZl9kZlJNX3NlYXNvbixhZXMoeD1FbnZpcm9ubWVudCwgeT1sc21lYW4sIHNoYXBlPVNleCkpICsgCiAgZ2VvbV9wb2ludChhZXMoc2hhcGU9U2V4KSwgc2l6ZSA9IDIsIHBvc2l0aW9uPXBkLCBzaG93LmxlZ2VuZD1UUlVFKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1sc21lYW4tU0UsIHltYXg9bHNtZWFuK1NFKSwgcG9zaXRpb24gPSBwZCwKICAgICAgICAgICAgICAgIHdpZHRoPTAuMywgc2l6ZT0wLjUsIGx0eT0xKSArIAogIGZhY2V0X2dyaWQoflNlYXNvbikgKwpsYWJzKGNhcHRpb24gPSAiRmlndXJlIDEzIHwgQWRqdXN0ZWQgc2Vhc29uYWwgaG9tZSByYW5nZSBtZWFucyBvZiBzZXhlcyBiZXR3ZWVuIGVudmlyb25tZW50cy4gSG9tZSByYW5nZXMgb2YgdGhlIHN1YnNpZGV6ZWQgXG4gcG9wdWxhdGlvbiByZW1haW4gcmVsYXRpdmVseSBzbWFsbCB0aHJvdWdob3V0IHRoZSBzZWFzb25zLiBBZnRlciBhZGp1c3RtZW50IG1hbGUgaG9tZSByZWFuZ2VzIHdlcmUgcmVkdWNlZCwgXG4gYnV0IHN0aWxsIHJlbWFpbmVkIHNsaWdodGx5IGxhcmdlciB0aGVuIGZlbWFsZXMuIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkrCiAgIyBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYyg4LDE5KSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gYyguODcsLjg1KSwgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChsaW5laGVpZ2h0PTEuNSwgZmFjZT0iYm9sZCIsIHNpemU9cmVsKDEuNSksIGhqdXN0ID0gMC41KSwKICAgICAgICBheGlzLnRleHQueCAgPSBlbGVtZW50X3RleHQodmp1c3Q9MC41LCBzaXplPTgpLAogICAgICAgIGF4aXMudGV4dC55ICA9IGVsZW1lbnRfdGV4dCh2anVzdD0wLjUsIHNpemU9OCksCiAgICAgICAgYXhpcy50aXRsZS55ICA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSwKICAgICAgICBheGlzLnRpdGxlLnggID0gZWxlbWVudF90ZXh0KHNpemU9MTApLAogICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTEyKSkgKwogIHhsYWIoIkVudmlyb25tZW50IikgKyB5bGFiKCJBcmVhIChoYSkgdXNpbmcgMTAwJSBNQ1AiKQphZGouc2Vhc29uYWwKCiMgQ29tYmluZSByYXcgYW5kIGFkanVzdGVkIHNlYXNvbmFsIGhvbWUgcmFuZ2VzIHdpdGggYSBzaW5nbGUgY2FwdGlvbjoKIyBncmlkLmFycmFuZ2UocmF3LnNlYXNvbmFsLCBhZGouc2Vhc29uYWwsIG5yb3cgPSAyLGhlaWdodHM9dW5pdChjKDIsMiksIGMoImluIiwgImluIikpLAojICAgICAgICAgICAgICBib3R0b20gPSB0ZXh0R3JvYigiIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3AgPSBncGFyKGZvbnRmYWNlID0gMSxmb250c2l6ZSA9IDEwKSxoanVzdCA9IDAsIHggPSAwKSkKCiMgbGlicmFyeShndGFibGUpCiMgZzIgPC0gZ2dwbG90R3JvYihyYXcuc2Vhc29uYWwpCiMgZzMgPC0gZ2dwbG90R3JvYihhZGouc2Vhc29uYWwpCiMgZyA8LSByYmluZChnMiwgZzMsIHNpemUgPSAiZmlyc3QiKQojIGckd2lkdGhzIDwtIHVuaXQucG1heChnMiR3aWR0aHMsIGczJHdpZHRocykKIyBncmlkLm5ld3BhZ2UoKQojIGdyaWQuZHJhdyhnKQoKYGBgCgoKCjxicj4KCgoKIyMgUG9zdC1Ib2MgQW5hbHlzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKClBvc3QtSG9jIGFuYWx5c2VzIG9uIHRoZSBTdG9uZSBDYW55b24gZGF0YSBzZXQsIHdpdGggaG9tZSByYW5nZSBtZWFucyBhdmVyYWdlZCBhY3Jvc3Mgc2V4LCBzdWdnZXN0ZWQgdGhhdCB0aGVyZSB3YXMgbm8gc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBob21lIHJhbmdlcyBiZXR3ZWVuIHRoZSBlbWVyZ2VuY2UgKDQuMyDCsSAyLjYgUy5FLiBoYSkgYW5kIHBvc3QtbW9uc29vbiBzZWFzb25zICg1LjEgwrEgMi4xIFMuRS4gaGEpIG5vciBkcnkgYW5kIG1vbnNvb24gKDEyLjIgwrEgMS43IFMuRS4gaGEgYW5kIDkuMCDCsSAxLjggUy5FLiBoYSkuIFRoZXJlIHdhcyBhbHNvIG5vIHNpZ25pZmljYW5jZSBiZXR3ZWVuIGVtZXJnZW5jZSBhbmQgZHJ5L21vbnNvb24gc2Vhc29ucywgYnV0IHRoZXJlIHdhcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBkcnkgYW5kIHBvc3QtbW9uc29vbiAoZGYgPSA4MC4yLCBQID0gMC4wNCkuIFBvc3QtSG9jIGFuYWx5c2VzIG9uIHRoZSBPd2wgSGVhZCBCdXR0ZXMgcG9wdWxhdGlvbiBpbmRpY2F0ZWQgdGhhdCB0aGVyZSB3YXMgbm8gc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIGVtZXJnZW5jZSAoMy4zIMKxIDIuMiBTLkUuIGhhKSBhbmQgcG9zdC1tb25zb29uICgyLjQgwrEgMi40IFMuRS4pIG5vciBkcnkgYW5kIG1vbnNvb24gKDE4LjkgwrEgMi4zIFMuRS4gaGEgYW5kIDIxLjkgwrEgMi4wIFMuRS4gaGEpIHJlZmxlY3RpbmcgdGhlIHNhbWUgcGF0dGVybiBhdCBTdG9uZSBDYW55b24uIEhvd2V2ZXIsIHRoZXJlIHdhcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiBlbWVyZ2VuY2UgYW5kIGRyeS9tb25zb29uIChkZiA9IDY5LjQsIFAgPSA8MC4wMDAxLCBhbmQgZGYgPSA2OCwgUCA9IDwwLjAwMDEgcmVzcGVjdGl2ZWx5KSwgYXMgd2VsbCBhcyBwb3N0LW1vbnNvb24gYW5kIGRyeS9tb25zb29uIChkZiA9IDc4LjksIFAgPSA8MC4wMDAxLCBhbmQgZGYgPSA3NCwgUCA9IDwwLjAwMDEpLiBUaGlzIHNob3dzIGEgcmF0aGVyIGRpZmZlcmVudCBwYXR0ZXJuIHRoYW4gc2VlbiBhdCBTdG9uZSBDYW55b24uIFBhaXJ3aXNlIGFuYWx5c2VzIGJldHdlZW4gdGhlIHR3byBwb3B1bGF0aW9ucyBpbmRpY2F0ZWQgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGVtZXJnZW5jZSAoZGYgPSA4Ny43LCBQID0gMC43Nikgb3IgcG9zdC1tb25zb29uIChkZiA9IDg5LjQsIFAgPSAwLjM1KS4gRGlmZmVyZW5jZXMgaW4gaG9tZSByYW5nZSBzaXplcyBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnMgd2VyZSBiZXR3ZWVuIHRoZSBkcnkgYW5kIG1vbnNvb24gc2Vhc29ucyAoRmlnLiAxNCkuICBPd2wgSGVhZCBob21lIHJhbmdlcyB3ZXJlIDU4JSBsYXJnZXIgdGhhbiB0aG9zZSBhdCBTdG9uZSBDYW55b24gZHVyaW5nIHRoZSBkcnkgc2Vhc29uLCBhbmQgNzYlIGxhcmdlciBkdXJpbmcgdGhlIG1vbnNvb24gc2Vhc29uLiAKCjxicj4KCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KZW1tX3MudCA8LSBlbW1lYW5zKFJNLm1vZC5TZWFzb24sIHBhaXJ3aXNlIH4gRW52aXJvbm1lbnQgfCBTZWFzb24pCmVtbV9zLnQKYGBgCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIG9mIHNlYXNvbnMgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpbnM6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIHBsb3QoU2V4LmVtbS5zZWFzLCBjb21wYXJpc29ucyA9IFRSVUUpCnBsb3QoZW1tX3MudCwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKRmlndXJlIDE0IHwgUGFpcndpc2UgY29tcGFyaXNvbnMgb2YgZWFjaCBzZWFzb24gYmV0d2VlbiBlbnZpcm9ubWVudHMuIE92ZXJsYXBwaW5nIHJlZCBiYXJzIGluZGljYXRlIG5vIHN0YXRpc3RpY2FsIGRpZmZlcmVuY2UuIAoKCgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgU2Vhcy5NZWFuc1Q8LWVtbWVhbnMoUk0ubW9kLlNlYXNvbiwgbGlzdChwYWlyd2lzZSB+IEVudmlyb25tZW50LCBwYWlyd2lzZSB+IFNlYXNvbikpCiMgU2Vhcy5NZWFuc1QKCmVtbV9zLnQ0IDwtIGVtbWVhbnMoUk0ubW9kLlNlYXNvbiwgcGFpcndpc2UgfiBTZWFzb24gfCBFbnZpcm9ubWVudCkKZW1tX3MudDQKYGBgCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIGJldHdlZW4gc2Vhc29ucyB3aXRoaW4gdGhlIHR3byBwb3B1bGF0aW9uczoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3MudDQsIGNvbXBhcmlzb25zID0gVFJVRSkKYGBgCkZpZ3VyZSAxNSB8IFBhaXJ3aXNlIGNvbXBhcmlzb25zIGJldHdlZW4gc2Vhc29ucyB3aXRoaW4gZWFjaCBlbnZpcm9ubWVudCBhZ2FpbnN0IGVzdGltYXRlZCBtYXJnaW5hbCBtZWFucy4gT3ZlcmxhcHBpbmcgcmVkIGJhcnMgaW5kaWNhdGUgbm8gc3RhdGlzdGljYWwgZGlmZmVyZW5jZS4gCgoKCgoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpzdWIgPC0gc3Vic2V0KHNlYXNvbmFsLCBFbnZpcm9ubWVudCA9PSAic3Vic2lkaXplZCIpCgpSTS5tb2QuU3ViIDwtIGxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+U2Vhc29uK1NleCtOK1NlYXNvbipTZXgrKDF8R2lsYSksIGRhdGE9c3ViKQoKZW1tX3MudDUgPC0gZW1tZWFucyhSTS5tb2QuU3ViLCBwYWlyd2lzZSB+IFNleCB8IFNlYXNvbikKZW1tX3MudDUgCmBgYAoKR3JhcGhpY2FsIENvbXBhcmlzb25zIGJldHdlZW4gc2V4IHdpdGhpbiB0aGUgc3Vic2lkaXplZCBwb3B1bGF0aW9uOgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KcGxvdChlbW1fcy50NSwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAgICAKRmlndXJlIDE2IHwgU3RvbmUgQ2FueW9uIHBhaXJ3aXNlIGNvbXBhcmlzb25zIG9mIG1hbGUgYW5kIGZlbWFsZSBob21lIHJhbmdlcyBvZiBlYWNoIHNlYXNvbi4KCjxicj4KCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpTZWFzLkluZC5NZWFuczwtcmVhZC5jc3YoIlNlYXNvbmFsIEhSIFRhYmxlLmNzdiIpCmthYmxlKFNlYXMuSW5kLk1lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdUYWJsZSA3IHwgTWVhbiBpbmRpdmlkdWFsIHNlYXNvbmFsIGhvbWUgcmFuZ2VzIHBvb2xlZCBmcm9tIHRoZSBlbnRpcmUgc3R1ZHkgcGVyaW9kLiBNaXNzaW5nIHZhbHVlcyBhcmUgZGVwaWN0ZWQgd2hlcmUgbm8gbG9jYXRpb25zIGZvciB0aGF0IGFuaW1hbCBkdXJpbmcgdGhhdCBwZXJpb2Qgd2VyZSBzdWNjZXNzZnVsbC4nKQpgYGAKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Kbm9uc3ViIDwtIHN1YnNldChzZWFzb25hbCwgRW52aXJvbm1lbnQgPT0gIm5vbnN1YnNpZGl6ZWQiKQoKUk0ubW9kLk5TdWIgPC0gbG1lcihIb21lX1JhbmdlXzEwMG1jcH5TZWFzb24rU2V4K04rU2Vhc29uKlNleCsoMXxHaWxhKSwgZGF0YT1ub25zdWIpCgplbW1fcy50NiA8LSBlbW1lYW5zKFJNLm1vZC5OU3ViLCBwYWlyd2lzZSB+IFNleCB8IFNlYXNvbikKZW1tX3MudDYgCmBgYAoKR3JhcGhpY2FsIENvbXBhcmlzb25zIGJldHdlZW4gc2V4IHdpdGhpbiB0aGUgbm9uLXN1YnNpZGl6ZWQgcG9wdWxhdGlvbjoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3MudDYsIGNvbXBhcmlzb25zID0gVFJVRSkKYGBgICAgCkZpZ3VyZSAxNyB8IE93bCBIZWFkIHBhaXJ3aXNlIGNvbXBhcmlzb25zIG9mIG1hbGUgYW5kIGZlbWFsZSBob21lIHJhbmdlcyBvZiBlYWNoIHNlYXNvbi4KCgo8YnI+CgoJS0RFIGFuYWx5c2VzIHdlcmUgbm90IGV4dGVuZGVkIHRvIHNlYXNvbmFsIGhvbWUgcmFuZ2UgYW5hbHlzZXMgZHVlIHRvIHNlbnNpdGl2aXR5IHRvIHNtYWxsIHNhbXBsZSBzaXplcy4gU21hbGwgc2FtcGxlIHNpemVzIGFuZCB0aGUgZGlzdHJpYnV0aW9uIG9mIHJlbG9jYXRpb25zIGhhdmUgYSBwcm9mb3VuZCBpbmZsdWVuY2Ugb24gS0RFIG91dHB1dHMuIEtERSBtZXRob2RzIGFyZSBrbm93biB0byBvdmVyZXN0aW1hdGUgaG9tZSByYW5nZXMgd2l0aCBzYW1wbGUgc2l6ZXMgdGhhdCBhcmUgc21hbGxlciB0aGFuIGFkZXF1YXRlLCBhcyBjYW4gYmUgc2VlbiB3aXRoIHNvbWUgaW5kaXZpZHVhbHMgaW4gdGhlIGFib3ZlIHllYXJseSBob21lIHJhbmdlIGFuYWx5c2VzLiBCZWNhdXNlIGFuYWx5emluZyBzZWFzb25hbCBob21lIHJhbmdlcyByZXN1bHRzIGluIHJlZHVjZWQgZGF0YSBzZXRzLCBLREUgb3V0cHV0cyB3b3VsZCBleGhpYml0IGxhcmdlIHVucmVhc29uYWJsZSBpbmZsYXRpb25zIGluIGhvbWUgcmFuZ2VzLiAKCgoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnNlYXNvbi5rZGU8LXJlYWQuY3N2KCJTQ19TZWFzb25hbF9JbnB1dC5jc3YiKQoKU0VBU19LREVfU2V4IDwtIHN1bW1hcnlTRShzZWFzb24ua2RlLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzk1a2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKCJTZWFzb24iLCJTZXgiKSwgbmEucm0gPSBUUlVFKQoKIyBTRUFTX0dSUF9NZWFucwprYWJsZShTRUFTX0tERV9TZXgsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1JhdyBLREUgR3JvdXAgTWVhbnMgb2YgU2Vhc29uYWwgSG9tZSBSYW5nZXMgYmV0d2VlbiBzZXhlcycpCmBgYAoKIApgYGB7ciBldmFsPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KU0VBU19LREVfTWVhbnMgPC0gc3VtbWFyeVNFKHNlYXNvbi5rZGUsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfOTVrZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIlNlYXNvbiIpLCBuYS5ybSA9IFRSVUUpCgojIFNFQVNfR1JQX01lYW5zCmthYmxlKFNFQVNfS0RFX01lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdSYXcgS0RFIEdyb3VwIE1lYW5zIG9mIFNlYXNvbmFsIEhvbWUgUmFuZ2VzJykKYGBgCiAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIHNlYXNvbmFsPC1yZWFkLmNzdigiU0NfU2Vhc29uYWxfRGF0YS5jc3YiKQoKUk0uS0RFLlNlYXNvbiA8LSBsbWVyKEhvbWVfUmFuZ2VfOTVrZGV+U2Vhc29uK1NleCtOK1NlYXNvbipTZXgrKDF8R2lsYSksIAogICAgICAgICAgICAgICAgICAgICAgZGF0YT1zZWFzb24ua2RlKQpzdW1tYXJ5KFJNLktERS5TZWFzb24pCmBgYAogCgpgYGB7ciBldmFsPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KYW5vdmEoUk0uS0RFLlNlYXNvbikKYGBgCgoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmdncGxvdChTRUFTX0tERV9TZXgsYWVzKHg9U2V4LCB5PUhvbWVfUmFuZ2VfOTVrZGUpKSArIAogIGdlb21fcG9pbnQoc2l6ZSA9IDIsIHBvc2l0aW9uPXBkKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzk1a2RlLXNlLCB5bWF4PUhvbWVfUmFuZ2VfOTVrZGUrc2UpLCBwb3NpdGlvbiA9IHBkLAogICAgICAgICAgICAgICAgd2lkdGg9MC4zLCBzaXplPTAuNSwgbHR5PTEpICsgCiAgZmFjZXRfZ3JpZCh+U2Vhc29uKSArCiAgdGhlbWVfYncoKSArCiAgeGxhYigiU2V4IikgKyB5bGFiKCJBcmVhIChoYSkgdXNpbmcgOTUlIEtERSIpCmBgYAoKCmBgYHtyIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSTS5LREUuU2Vhc29uIDwtIGxtZXIoSG9tZV9SYW5nZV85NWtkZX5TZWFzb24rU2V4K04rU2Vhc29uKlNleCsoMXxHaWxhKSwgCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPXNlYXNvbi5rZGUpCgojIFJNLm1hcmdpbmFsIDwtIGxzbWVhbnMoUk0ubW9kLlNlYXNvbiwgCiMgICAgICAgICAgICAgICAgICAgICB+IEVudmlyb25tZW50KQojIFJNLm1hcmdpbmFsCgojIyBDQVRBR09SSVpFIExTTSBHUkFQSCBCWSBTRVggQkVUV0VFTiBFTlZJUk9OTUVOVDoKcmVmUk1fS0RFIDwtIGxzbWVhbnMoUk0uS0RFLlNlYXNvbiwgc3BlY3MgPSBjKCJTZWFzb24iLCJTZXgiKSkKCiMgcmVmUk1fc2V4CnJlZl9kZlJNX0tERSA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fS0RFKSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4yKQoKZ2dwbG90KHJlZl9kZlJNX0tERSxhZXMoeD1TZXgsIHk9bHNtZWFuKSkgKyAKICBnZW9tX3BvaW50KHNpemUgPSAyLCBwb3NpdGlvbj1wZCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49bHNtZWFuLVNFLCB5bWF4PWxzbWVhbitTRSksIHBvc2l0aW9uID0gcGQsCiAgICAgICAgICAgICAgICB3aWR0aD0wLjMsIHNpemU9MC41LCBsdHk9MSkgKyAKICBmYWNldF9ncmlkKH5TZWFzb24pICsKICB4bGFiKCJTZXgiKSArIHlsYWIoIkFyZWEgKGhhKSB1c2luZyA5NSUgS0RFIikKYGBgCgogCmBgYHtyIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQplbW1fc2V4X0tERSA8LSBlbW1lYW5zKFJNLktERS5TZWFzb24sIHBhaXJ3aXNlIH4gU2V4IHwgU2Vhc29uKQplbW1fc2V4X0tERSAKYGBgCgoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3NleF9LREUsIGNvbXBhcmlzb25zPVRSVUUpCmBgYAoKCjxicj4KCgojIEhvbWUgUmFuZ2UgT3ZlcmxhcCAoTUNQKQoKVGhlIFN0b25lIENhbnlvbiBwb3B1bGF0aW9uIHNlZW1zIHRvIGV4aGliaXQgZ3JlYXRlciBmZW1hbGUtZmVtYWxlIG92ZXJsYXAgYXMgd2VsbCBhcyBjb25zaWRlcmFibGUgb3ZlcmxhcCBvZiBtYWxlLWZlbWFsZSBob21lIHJhbmdlcy4gVGhlcmUgYXBwZWFycyB0byBiZSBsaW1pdGVkIG1hbGUtbWFsZSBvdmVybGFwLCB3aXRoIG9jY3VyYW5jZSBoYXBwZW5pbmcgaW4gb25seSB0d28gbWFsZS1tYWxlIGhvbWUgcmFuZ2UgcG9seWdvbnMuIFRoaXMgZmluZGluZyBpcyBpbiBjb250cmFzdCB0byB0aGUgT3dsIEhlYWQgYnV0dGVzIHN0dWR5IHdoaWNoIHJldmVhbGVkIHRoYXQgdGhlcmUgd2FzIGEgbGFyZ2UgZGVncmVlIG9mIG92ZXJsYXAgYW1vbmcgbWFsZS1mZW1hbGUgYW5kIG1hbGUtbWFsZSBvdmVybGFwcyAoVGFibGUgOCkuIEdpbGxhcmRvIGNvbmNsdWRlZCB0aGF0LCBpbiB0aGVpciBzdHVkeSwgdGhlIGhpZ2ggZGVncmVlIG9mIG92ZXJsYXAgaW4gbWFsZXMtbWFsZXMgaW50ZXJhY3Rpb25zIG1heSBiZSBkdWUgdG8gaGF2aW5nIGxhcmdlciBob21lIHJhbmdlcyBmb3IgbWF0ZSBzZWFyY2hpbmcgYWN0aXZpdGllcy4gTWFsZXMgbWF5IGhhdmUgYW5kIGluY3JlYXNlZCBob21lIHJhbmdlIHNpemUgdG8gbWF4aW1pemUgdGhlaXIgYWNjZXNzIHRvIG11bHRpcGxlIGZlbWFsZXMuIFNoZSBjb25jbHVkZWQgdGhhdCB0aGUgbGFjayBvZiBmZW1hbGUtZmVtYWxlIG92ZXJsYXAgbWF5IGJlIGR1ZSB0byBzbWFsbGVyIGhvbWUgcmFuZ2Ugc2l6ZXMuIAoKQXQgU3RvbmUgQ2FueW9uLCBtYWxlcyBoYXZlIHJlZHVjZWQgaG9tZSByYW5nZSBzaXplcyAoVGFibGUgMzsgRmlnLiA1KS4gSG93ZXZlciwgbWFsZXMgc3RpbGwgcmV0YWluIGhvbWUgcmFuZ2Ugb3ZlcmxhcCB3aXRoIG11bHRpcGxlIGZlbWFsZXMgd2hpbGUgaGF2aW5nIHJlZHVjZWQgY29udGFjdCB3aXRoIG90aGVyIG1hbGVzLiBUaGlzIG1heSBiZSBpbiByZXNwb25zZSB0byBudXRyaWVudCBzdWJzaWRpZXMgdGhhdCByZWR1Y2UgdGhlIG5lZWQgdG8gaGF2ZSBleHBhbmRlZCBob21lIHJhbmdlIHNpemVzIGZvciBmb3JhZ2luZyBhY3Rpdml0aWVzIGZvciBib3RoIG1hbGVzIGFuZCBmZW1hbGVzLiBUaGVyZSBtYXkgYWxzbyBiZSBhIGhpZ2hlciBkZW5zaXR5IG9mIGZlbWFsZXMgYXMgYSByZXNwb25zZSB0byByZXNvdXJjZSBhdmFpbGFiaWxpdHkgYW5kIHJlZHVjZWQgcmFuZ2UgcmVxdWlyZW1lbnRzLiBNYWxlcyBhcmUgbm90IGZvcmNlZCB0byBleHBhbmQgaG9tZSByYW5nZXMgZm9yIG1hdGUgc2VhcmNoaW5nIHRvIHRoZSBleHRhbnQgdGhhdCBpbmRpdmlkdWFscyBhdCBPd2wgSGVhZCBCdXR0ZXMgbWF5IGJlIHN1YmplY3QgdG8uIAoKCjxicj4KCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpPTF9UYWJsZTwtcmVhZC5jc3YoIi4vT3ZlcmxhcC9PdmVyTGFwX1RhYmxlLmNzdiIpCgprYWJsZShPTF9UYWJsZSwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnVGFibGUgOCB8IEhvbWUgcmFuZ2Ugb3ZlcmxhcCBvZiBHaWxhIE1vbnN0ZXJzIGF0IHRoZSBudXRyaWVudCBzdWJzaWRpemVkIHNpdGUuIE1hbGUtbWFsZSBvdmVybGFwcyBvbmx5IG9jY3VyZWQgYmV0d2VlbiB0d28gcGFpcnMgb2YgbWFsZXM6IE0xNC1NNjkgYW5kIE0xMTktTTIxNSBhdCAwLjUgaGEuIGFuZCAxOS41IGhhLiByZXNwZWN0aXZlbHkgYW5kIHdlcmUgdGhlcmVmb3JlIG5vdCBpbmNsdWRlZCBpbiB0aGUgdGFibGUuLicpIApgYGAKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KaHIub3ZlcmxhcDwtcmVhZC5jc3YoIi4vT3ZlcmxhcC9IUl9PdmVybGFwX0RhdGEuY3N2IikKCmhyLm92ZXJsYXAuYW5hbCA8LSBzdW1tYXJ5U0UoaHIub3ZlcmxhcCwgbWVhc3VyZXZhcj0iT0wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIkludGVyYWN0aW9uIiksIG5hLnJtID0gVFJVRSkKCiMgU0VBU19HUlBfTWVhbnMKa2FibGUoaHIub3ZlcmxhcC5hbmFsLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdUYWJsZSA5IHwgU3VtbWFyeSBvZiBob21lIHJhbmdlIG92ZXJsYXAuJykKYGBgCgoKCgojIEhvbWUgUmFuZ2UgT3ZlcmxhcCAoS0RFKQoKYGBge3IgZXZhbD1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9VFJVRX0KCiMga2RlX2FuYWx5c2lzLmhyZWYucmFzdGVyIDwtIGZ1bmN0aW9uKGZpbGVuYW1lKXsKIyAgIGRhdGEgPC0gcmVhZC5jc3YoZmlsZSA9IGZpbGVuYW1lKQojICAgeCA8LSBhcy5kYXRhLmZyYW1lKGRhdGEkRUFTVElORykKIyAgIHkgPC0gYXMuZGF0YS5mcmFtZShkYXRhJE5PUlRISU5HKQojICAgeHkgPC0gYyh4LHkpCiMgICBkYXRhLnByb2ogPC0gU3BhdGlhbFBvaW50c0RhdGFGcmFtZSh4eSxkYXRhLCBwcm9qNHN0cmluZyA9IENSUy5TQykKIyAgIHh5IDwtIFNwYXRpYWxQb2ludHMoZGF0YS5wcm9qQGNvb3JkcykKIyAgIGtkZTwta2VybmVsVUQoeHksIGg9ImhyZWYiLCBrZXJuPSJiaXZub3JtIiwgZ3JpZD0xMDAwKQojICAga2RlQHByb2o0c3RyaW5nPC0gQ1JTLlNDCiMgICBrZGUKIyB9CgpNMTEyLnJhc3Rlci5vdXRwdXQ8LWtkZV9hbmFseXNpcy5ocmVmLnJhc3RlcigiLi9NMTEyL00xMTIgLmNzdiIpCkYxMTQucmFzdGVyLm91dHB1dDwta2RlX2FuYWx5c2lzLmhyZWYucmFzdGVyKCIuL0YxMTQvRjExNCAuY3N2IikKRjIwMC5yYXN0ZXIub3V0cHV0PC1rZGVfYW5hbHlzaXMuaHJlZi5yYXN0ZXIoIi4vRjIwMC9GMjAwIC5jc3YiKQojIHBsb3QoTTExMi5yYXN0ZXIub3V0cHV0KQojIG1hcHZpZXcoTTExMi5yYXN0ZXIub3V0cHV0LCBhbHBoYS5yZWdpb25zPTAuOCkKCk0xMTIucmFzdGVyPC1yYXN0ZXIoTTExMi5yYXN0ZXIub3V0cHV0KQpGMTE0LnJhc3RlcjwtcmFzdGVyKEYxMTQucmFzdGVyLm91dHB1dCkKRjIwMC5yYXN0ZXI8LXJhc3RlcihGMjAwLnJhc3Rlci5vdXRwdXQpCgoKbGlicmFyeSh0bWFwKQojIGNyZWF0ZXMgYSBib3VuZGluZyBib3ggYmFzZWQgb24gdGhlIGV4dGVudHMgb2YgdGhlIHBvbHlnb24KI2JvdW5kaW5nX2JveCA8LSBiYihPdXRwdXQuQXJlYXMpCk0xMTIuYmIgPC0gTTExMl9LREVAYmJveApGMTE0LmJiIDwtIEYxMTRfS0RFQGJib3gKRjIwMC5iYiA8LSBGMjAwX0tERUBiYm94CgoKIyBtYXBzIHRoZSByYXN0ZXIgd2l0aGluIHRoZSBib3VuZGluZyBib3gKIyB0bV9zaGFwZShNMTEyLnJhc3RlciwgYmJveCA9IE0xMTIuYmIpICsgdG1fcmFzdGVyKCJ1ZCIpCgojIG1hc2sgdGhlIHJhc3RlciBieSB0aGUgb3V0cHV0IGFyZWEgcG9seWdvbgpNMTEyLm1hc2tlZCA8LSBtYXNrKE0xMTIucmFzdGVyLCBNMTEyX0tERSkKIyBNMTEyLm1hc2tlZFtpcy5uYShNMTEyLm1hc2tlZCldIDwtIDAKRjExNC5tYXNrZWQgPC0gbWFzayhGMTE0LnJhc3RlciwgRjExNF9LREUpCiMgRjExNC5tYXNrZWRbaXMubmEoRjExNC5tYXNrZWQpXSA8LSAwCkYyMDAubWFza2VkIDwtIG1hc2soRjIwMC5yYXN0ZXIsIEYyMDBfS0RFKQojIEYyMDAubWFza2VkW2lzLm5hKEYyMDAubWFza2VkKV0gPC0gMAoKcGxvdChNMTEyLm1hc2tlZCkKIyBtYXB2aWV3KE0xMTIubWFza2VkLCBhbHBoYS5yZWdpb25zPTAuNikKCnRtX2xheW91dChtYWluLnRpdGxlPSJNMTEyIEYxMTQgYW5kIEYyMDAgS0RFIE92ZXJsYXAiKSt0bV9zaGFwZShNMTEyLm1hc2tlZCkgKwogIHRtX3Jhc3RlcigidWQiLCBzdHlsZSA9ICJxdWFudGlsZSIsIG4gPSAxMDAsIGxlZ2VuZC5zaG93ID0gRkFMU0UsIHBhbGV0dGUgPSAiLVlsR25CdSIpICsKICB0bV9zaGFwZShGMTE0Lm1hc2tlZCkgKyAKICB0bV9yYXN0ZXIoInVkIiwgc3R5bGUgPSAicXVhbnRpbGUiLCBuID0gMTAwLCBsZWdlbmQuc2hvdyA9IEZBTFNFLCBwYWxldHRlID0gIi1ZbEduQnUiKSArCiAgdG1fc2hhcGUoRjIwMC5tYXNrZWQpICsKICB0bV9yYXN0ZXIoInVkIiwgc3R5bGUgPSAicXVhbnRpbGUiLCBuID0gMTAwLCBsZWdlbmQuc2hvdyA9IEZBTFNFLCBwYWxldHRlID0gIi1ZbEduQnUiKSArCiAgdG1fc2hhcGUoTTExMl9LREUpICsgCiAgdG1fYm9yZGVycyhhbHBoYT0uMywgY29sID0gImJsYWNrIikgKyAKICB0bV9zaGFwZShGMTE0X0tERSkgKyAKICB0bV9ib3JkZXJzKGFscGhhPS4zLCBjb2wgPSAiYmxhY2siKSArIAogIHRtX3NoYXBlKEYyMDBfS0RFKSArIAogIHRtX2JvcmRlcnMoYWxwaGE9LjMsIGNvbCA9ICJibGFjayIpICsKICB0bV9sYXlvdXQoZnJhbWUgPSBGQUxTRSkKICAKIyAsIGJib3ggPSBNMTEyLmJiCiMgY29tcHV0ZSBob21lcmFuZ2VzIGZvciA1MCUsIDk1JSBvZiBwb2ludHMsIG9iamVjdHMgYXJlIHJldHVybmVkIGFzIHNwYXRpYWwgcG9seWdvbiBkYXRhIGZyYW1lcwpNMTEyLnJhbmdlOTUgPC0gZ2V0dmVydGljZXNocihNMTEyLnJhc3Rlci5vdXRwdXQsIHBlcmNlbnQgPSA5NSkKTTExMi5yYW5nZTUwIDwtIGdldHZlcnRpY2VzaHIoTTExMi5yYXN0ZXIub3V0cHV0LCBwZXJjZW50ID0gNTApCkYxMTQucmFuZ2U5NSA8LSBnZXR2ZXJ0aWNlc2hyKEYxMTQucmFzdGVyLm91dHB1dCwgcGVyY2VudCA9IDk1KQpGMTE0LnJhbmdlNTAgPC0gZ2V0dmVydGljZXNocihGMTE0LnJhc3Rlci5vdXRwdXQsIHBlcmNlbnQgPSA1MCkKRjIwMC5yYW5nZTk1IDwtIGdldHZlcnRpY2VzaHIoRjIwMC5yYXN0ZXIub3V0cHV0LCBwZXJjZW50ID0gOTUpCkYyMDAucmFuZ2U1MCA8LSBnZXR2ZXJ0aWNlc2hyKEYyMDAucmFzdGVyLm91dHB1dCwgcGVyY2VudCA9IDUwKQoKdG1fbGF5b3V0KG1haW4udGl0bGU9Ik0xMTIgRjExNCBhbmQgRjIwMCBLREUgT3ZlcmxhcCIpKwp0bV9zaGFwZShNMTEyLnJhbmdlOTUpICsgCiAgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNmYjZhNGEiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZmI2YTRhIikgKwp0bV9zaGFwZShNMTEyLnJhbmdlNTApICsgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNkZTJkMjYiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZGUyZDI2IikgKwp0bV9sYXlvdXQoZnJhbWUgPSBGQUxTRSkgKwp0bV9zaGFwZShGMTE0LnJhbmdlOTUpICsgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNmYjZhNGEiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZmI2YTRhIikgKwp0bV9zaGFwZShGMTE0LnJhbmdlNTApICsgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNkZTJkMjYiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZGUyZDI2IikgKwp0bV9sYXlvdXQoZnJhbWUgPSBGQUxTRSkgKyAKdG1fc2hhcGUoRjIwMC5yYW5nZTk1KSArIHRtX2JvcmRlcnMoYWxwaGE9LjcsIGNvbCA9ICIjZmI2YTRhIiwgbHdkID0gMikgKyB0bV9maWxsKGFscGhhPS4xLCBjb2wgPSAiI2ZiNmE0YSIpICsKdG1fc2hhcGUoRjIwMC5yYW5nZTUwKSArIHRtX2JvcmRlcnMoYWxwaGE9LjcsIGNvbCA9ICIjZGUyZDI2IiwgbHdkID0gMikgKyB0bV9maWxsKGFscGhhPS4xLCBjb2wgPSAiI2RlMmQyNiIpICsKdG1fbGF5b3V0KGZyYW1lID0gRkFMU0UpCgojIyB3cml0ZSByYXN0ZXIgZmlsZXMgdG8gY29tcHV0ZXI6IAojIHdyaXRlUmFzdGVyKG1hc2tlZF9rZGUsIGZpbGVuYW1lID0gImtlcm5lbF9kZW5zaXR5LnRpZiIpCmBgYAoKCgoK